我有一个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);
当我尝试这样做时,它总是抛出一个无效的参数异常。我在这里做错了吗?
感谢。