Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/164.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在DLL方法中创建COM接口指针在从一个应用程序调用时有效,但在从另一个应用程序调用时无效 我使用COM互操作从C++ DLL调用C语言的DLL中的一个方法。C++ DLL是从另一个应用程序调用的,它本质上是一个黑盒子(例如,我看不到它的任何代码)。 当这个应用程序调用C++ DLL中的方法时,它会按照预期执行,直到尝试将指针/分配内存创建到C~*COM接口,此时方法失败(错误记录): TJIntegration::ITJInterfacePtr tJPtr=NULL; HRESULT hRes=tJPtr.CreateInstance(uu uuidof(TJIntegration::TJInterface)); 如果(!(成功(hRes))) { LOG_ERROR_C#_C++_Visual Studio_Com - Fatal编程技术网

C# 在DLL方法中创建COM接口指针在从一个应用程序调用时有效,但在从另一个应用程序调用时无效 我使用COM互操作从C++ DLL调用C语言的DLL中的一个方法。C++ DLL是从另一个应用程序调用的,它本质上是一个黑盒子(例如,我看不到它的任何代码)。 当这个应用程序调用C++ DLL中的方法时,它会按照预期执行,直到尝试将指针/分配内存创建到C~*COM接口,此时方法失败(错误记录): TJIntegration::ITJInterfacePtr tJPtr=NULL; HRESULT hRes=tJPtr.CreateInstance(uu uuidof(TJIntegration::TJInterface)); 如果(!(成功(hRes))) { LOG_ERROR

C# 在DLL方法中创建COM接口指针在从一个应用程序调用时有效,但在从另一个应用程序调用时无效 我使用COM互操作从C++ DLL调用C语言的DLL中的一个方法。C++ DLL是从另一个应用程序调用的,它本质上是一个黑盒子(例如,我看不到它的任何代码)。 当这个应用程序调用C++ DLL中的方法时,它会按照预期执行,直到尝试将指针/分配内存创建到C~*COM接口,此时方法失败(错误记录): TJIntegration::ITJInterfacePtr tJPtr=NULL; HRESULT hRes=tJPtr.CreateInstance(uu uuidof(TJIntegration::TJInterface)); 如果(!(成功(hRes))) { LOG_ERROR,c#,c++,visual-studio,com,C#,C++,Visual Studio,Com,结果表明,在使用regasm注册dll时,我需要使用/codebase选项。这个问题与您链接的问题有何不同?当您说指针时,您的意思是它在COM对象/函数中分配内存时崩溃了?还是调用应用程序只是在调用me时崩溃了thod?或者程序在崩溃之前是否将其放入COM方法?因为这可能只是基于函数参数的错误。@tobi303我链接的问题是它在不同机器上使用时崩溃,这是由于dll未注册。这与同一机器上的不同应用程序有关(dll注册的地方)调用dll时行为不同。@KevinHirst在COM对象/函数中分配内存时

结果表明,在使用regasm注册dll时,我需要使用
/codebase
选项。

这个问题与您链接的问题有何不同?当您说指针时,您的意思是它在COM对象/函数中分配内存时崩溃了?还是调用应用程序只是在调用me时崩溃了thod?或者程序在崩溃之前是否将其放入COM方法?因为这可能只是基于函数参数的错误。@tobi303我链接的问题是它在不同机器上使用时崩溃,这是由于dll未注册。这与同一机器上的不同应用程序有关(dll注册的地方)调用dll时行为不同。@KevinHirst在COM对象/函数中分配内存时崩溃(例如,创建指针的行导致崩溃)。该方法被正确调用并按预期执行,直到这一行导致调用应用程序崩溃。这只是中断的错误报告。CoCreateInstance失败有多种原因,如果不显示hRes的值,则无法知道原因。
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?";
}