C#-我的应用程序和与外部应用程序的互操作性(DLL / COM)
||
我一直在开发一个使用DLL互操作到外部数据库应用程序的C#应用程序。
该外部应用程序与我的C#应用程序同时启动,并且只要我的C#应用程序正在运行就可以使用。
现在真正的问题与管理与外部应用程序交互所需创建的对象有关。
当我声明可从引用的DLL \获得的对象时,这些对象具有与文件一起操作(专有)并运行一些查询的方法(例如是否由此外部应用程序GUI进行了处理)。这些对象使用ѭ0销毁,而其他对象在不同的应用程序域中运行,通过使用ѭ1进行操作并调用
AppDomain.Unload(\"A_DOMAIN\")
,释放用于该操作的DLL ...
采取这些变通办法是为了确保此外部应用程序不会“阻止”这些操作中使用的文件,从而允许从文件夹中删除或移动它们。
例如
private static ClientClass objApp = new ClientClass();
public bool ImportDelimitedFile(
string fileToImport,
string outputFile,
string rdfFile)
{
GENERICIMPORTLib import = new GENERICIMPORTLibClass();
try
{
import.ImportDelimFile(fileToImport, outputFile, 0, \"\", rdfFile, 0);
return true;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
return false;
}
finally
{
System.Runtime.InteropServices.Marshal.ReleaseComObject(import);
import = null;
}
}
public int DbNumRecs(string file)
{
if (!File.Exists(file))
{
return -1;
}
System.AppDomain newDomain = System.AppDomain.CreateDomain();
COMMONIDEACONTROLSLib db = new COMMONIDEACONTROLSLibClass();
try
{
db = objApp.OpenDatabase(file);
int count = (int)db.Count;
db.Close();
objApp.CloseDatabase(file);
return count;
}
catch (Exception ex)
{
return -1;
}
finally
{
System.AppDomain.Unload(newDomain);
GC.Collect();
GC.WaitForPendingFinalizers();
}
}
由于我没有任何种类的API手册,因此这两个“解决方案”都是通过反复试验得出的。这些解决方案正确吗?你能解释我的区别吗?我是否真的需要同时使用这两种解决方案?
谢谢!
没有找到相关结果
已邀请:
2 个回复
净爽
和
实际上,您可以创建回送COM对象本身的封送处理,而不是通过代理实例化它。此代码已在此处完全编写且未经测试,因此可能有问题。
肺鬼耙扮群