2017-10-17 103 views
-1

我使用COM互操作来调用从C++ DLL中的C#DLL的方法调用时。从另一个应用程序调用C++ dll,对我来说本质上是一个黑盒子(例如,我看不到它的任何代码)。创建COM接口指针的作品从一个应用程序调用时,但不会从其他应用程序

当此应用程序调用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),这些应用程序,所以我不明白为什么从另一个调用的时候,方法将正确地从一个应用程序调用时运行,但在这一点上失败了呢?

+0

如何这个问题从一个不同的你联系? – user463035818

+0

当你说指针时,你的意思是它在COM对象/函数中分配内存时崩溃了吗?或者,调用应用程序崩溃只是*调用*方法?或者程序在崩溃之前将它变成COM方法?因为这可能只是基于函数参数的错误。 –

+0

@ tobi303我联系的问题是有不同的机器上,由于没有注册的DLL使用,是当它崩溃的事情。这是在同一台机器上(不同的应用程序在dll注册的地方)进行dll调用时的行为。 –

回答

0

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

相关问题