2009-04-24 184 views
1

我想要调用从C#下面的C++函数(由DLL导出):编组引用类型从C++到C#

void createVm( 
    const jace::VmLoader& loader, 
    const jace::OptionList& options, 
    bool ignoreUnrecognized = true); 

我发现文档编组由C原语++到C#,但我m不确定如何处理引用类型或非原型类型,如VmLoader或OptionList(这两个类都是类)。我试图用一个C#层封装一个C++ API,委托给实际方法实现的底层C++代码。

任何想法?

回答

4

AFAIK,PInvoking与C++构造函数不支持的操作。你可能可以让它工作,但我认为你会发现问题。

什么是支持写一个简单的C包装函数调用到你的C++函数。 PInvoke到包装功能,而这将做到这一点。

0

假设C++ DLL正确地导出了通过引用传递的类型,你可以使用一个轻量级的托管C++包装来调用dll。通过托管C++,您可以直接调用本机C/C++库和dll,同时仍然从生成的程序集中导出托管接口。其他.Net语言可以像调用任何其他程序集一样调用受管接口。这是一个额外的开销,但是可以是最快的方式来完成它。