当从一个应用程序调用时,在DLL方法中创建COM接口指针是有效的,但当从另一个应用软件调用时则无效

Creating COM interface pointer in DLL method works when called from one application but does not when called from another application

本文关键字:调用 接口 有效 指针 无效 应用软件 另一个 COM 方法 一个 应用程序      更新时间:2023-10-16

我正在使用COM互操作从C++dll调用C#dll中的方法。C++dll是从另一个对我来说本质上是黑匣子的应用程序调用的(例如,我看不到它的任何代码。)

当该应用程序调用C++dll中的方法时,它将按预期执行,直到尝试创建指向C#COM接口的指针/分配内存,此时该方法失败(记录错误):

TJIntegration::ITJInterfacePtr tJPtr = NULL;
HRESULT hRes = tJPtr.CreateInstance(__uuidof(TJIntegration::TJInterface));
if (!(SUCCEEDED(hRes)))
{
LOG_ERROR << "Could not create pointer for TJInterface. Has the COM DLL been registered?";
}

然而,我已经创建了一个测试应用程序,它也调用这个dll,并且该方法完全按预期执行,包括创建这个指针。

我正在同一台机器上测试这些应用程序(dll注册的地方),所以我不明白为什么从一个应用程序调用该方法时会正常工作,但从另一个应用软件调用时会失败?

事实证明,当使用regasm注册dll时,我需要使用/codebase选项。