c# - 指向 C# 和 C++ 之间接口(interface)的变量指针

标签 c# c++

我目前无法尝试进行此转换。我有一个公开函数的 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/

相关文章:

c++ - Visual Basic.NET 中的 C++ 模板相当于什么?

c++ - 如何为 wxGrid 单元格创建复选框更改事件

c# - 如何仅搜索和替换完全匹配的字符串

c# - NHibernate - 记录出现在搜索结果中的项目

c# - NEST-低级搜索不返回日期

c++ - 如何链接一个简单的 libssh 程序

c# - 滚动条样式

c# - 在日期时间 c# 中格式化字符串以插入 MYSQL 日期时间列

c++ - 在两个派生类之间进行转换

c++ - 是否有任何 IDE 或插件可以扩展/预处理宏并在不编译的情况下内联显示其结果?