【问题标题】:Passing Unmanaged object reference to Unmanaged method in C++/CLI managed method在 C++/CLI 托管方法中将非托管对象引用传递给非托管方法
【发布时间】: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


【解决方案1】:

用户名或密码可能不正确。 AccessViolation 最好注意这些问题。 另外,我不明白为什么你在上面的代码中处理事情的方式会出错。

【讨论】:

    猜你喜欢
    • 2011-07-12
    • 1970-01-01
    • 2011-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-24
    • 2011-08-05
    • 1970-01-01
    相关资源
    最近更新 更多