我目前无法尝试进行此转换。我有一个公开函数的 C++ 包装器...
public __gc class InternalModuleConfig : public ModuleConfig
{
Object* InternalModuleConfig::CommitChanges(IModuleConfig* config)
{
VARIANT variant = {0};
m_pModuleConfig = config;
HRESULT hr = m_pModuleConfig->CommitChanges(&variant);
if (FAILED(hr))
{
VariantClear(&variant);
return Marshal::GetObjectForNativeVariant(&variant);
}
return NULL;
};
};
我试图在 C# 中调用此函数但失败了。我在 C# 中有一个具有以下命名空间的接口(interface):
DirectShow.IModuleConfig
现在我尝试使用我现有的接口(interface)并获取指向它的指针以用作 C# 中 CommitChanges 的变量,但是我总是遇到转换错误。
这是我正在尝试的准系统......
InternalModuleConfig config;
config.CommitChanges(ref (filter as IModuleConfig));
这不起作用...我对如何为参数应用类型 IModuleConfig* 感到有点困惑。
有什么想法吗?
编辑: 这是 InternalModuleConfig 基于的接口(interface):
public __gc interface ModuleConfig : public IDisposable
{
public:
virtual Object* CommitChanges(IModuleConfig* config) = 0;
IModuleConfig* m_pModuleConfig;
};
最佳答案
自从我完成 C++/CLI 以来已经有一段时间了,但如果您打算拥有 C# ref 参数,我相信您需要指向 C++ 中的指针。
Object* InternalModuleConfig::CommitChanges(IModuleConfig** config)
托管堆中的每个对象都由指针访问。为了允许在函数内更改指针(ref 语义),您需要一个指向该指针的指针。
或者相反,如果您不打算使用 ref
语义,请在 C# 端删除该修饰符,您应该能够传递托管对象。
关于c# - 指向 C# 和 C++ 之间接口(interface)的变量指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9504467/