基于微软的 openxml 封装了一套 C# 的 office 库,生成 dll 名称为 A.dll
为了方便已有 C++ 编程产品 的调用,我用 C++ 的 CLR 对 A.dll 进行了又一次封装,生成 dll 名称为 B.dll
然后用 C++ 写了一个测试 B.dll 的 exe 项目为 C.exe,
问题:
当时数据量不大时,无论 C.exe 是否设置 CLR,程序都能正常使用;
当数据量较大时,如果设置 C.exe 为 CLR,程序能正常使用;
当数据量较大时,如果不设置 C.exe 为 CLR,程序提示 Dispose 失败;
关键是我的既有 项目为一个大型计算类软件,exe 没办法设置为 CLR 项目,不知道各位是否遇到类似问题,有没有解决方案,此现象背后的机理是怎样,请GS帮忙解答?
你可以使用 COM Interop 来解决这个问题。以下是步骤:
下面是一个例子:
#import "A.tlb" raw_interfaces_only
void foo()
{
CoInitialize(NULL);
A::IObjectPtr obj(__uuidof(A::Object));
obj->Method();
CoUninitialize();
}
其中,"A.tlb" 是由 C# 项目生成的类型库文件,"A::IObjectPtr" 和 "A::Object" 是从类型库中导入的 COM 对象指针和对象类型。"Method" 是 COM 对象中的方法名。
注意事项: