传递COM可见结构作为参数

时间:2014-05-22 14:55:00

标签: c# c++ .net struct com

我有一个C#COM DLL,它声明了一个具有ComVisible = true属性的结构。 COM客户端是本机C ++代码。我可以在COM客户端中实例化结构并将其作为参数传递给其中一个COM API吗?

[ComVisible(true)]
[Guid("xxx-xx-xx-xx-xxx")]
public struct TestInfo
{
    [MarshalAs(UnmanagedType.BStr)]
    public string string1;

    [MarshalAs(UnmanagedType.BStr)]
    public string string2;

}

public interface ISomeInterface
{
    void CallCOMAPI(TestInfo test);
}

public class CoSomeInterface : ISomeInterface
{
    void CallCOMAPI(TestInfo test)
    {
      // test.string1 --- access it
    }
}

现在因为它被声明为Comvisible,所以我在tlb头文件中有必要的定义。所以我可以在我的本机C ++客户端中编写类似的东西

TestInfo *ptest = new TestInfo();
ptest->string1 = L"something";
ptest->string2 = L"something";
HRESULT hr = provider->CallCOMAPI(*ptest);

当我尝试这样做时,它总是抛出一个无效的参数异常。我在这里做错了吗?

感谢。

0 个答案:

没有答案