【发布时间】:2010-11-29 07:37:31
【问题描述】:
当我尝试将非托管对象传递给用托管 C++/CLI 类编写的方法中的 COM 方法时,我遇到了异常。以下是代码示例
//C++/CLI class
public ref class PSIAAdaptorManagedWrapper
{
CConfiguration *Configuration;
void InitializeConfig();
}
//C++/CLI Method implementation
void PSIAAdaptorManagedWrapper::InitializeConfig() {
Configuration = new CConfiguration();
Configuration->IPAddress = "127.0.0.1";
Configuration->UserName = "User";
Configuration->password = "password";
SomeComObject->GetInitiConfig((void *) Configuration); // Exception line
}
//signature of COM object from IDL file (observer paramer it takes is in)
[helpstring("method InitializeCameraConfig")]
HRESULT GetInitiConfig([in] void *configparam);
上面的代码编译得很好。但是当执行时,我在线得到“System.AccessViolation”runt time 错误。我认为这是因为,我试图在托管函数中分配非托管内存。但我不确定如何解决这个问题。
【问题讨论】:
-
可能相似,但在这里我有关于在托管方法中将非托管对象传递给 COM 方法的问题。如果您有任何有用的链接,请发布
-
在将托管代码传递给托管函数之前,您必须进行封送处理。您应该检查下面的这些链接。 SO articleMSDNCodeProject
-
顺便说一句,除非您在此处使用跟踪指针,否则您有内存泄漏:
CConfiguration^ Configuration;和Configuration = gcnew CConfiguration();
标签: c# c++-cli interop com-interop unmanaged