1

我想从 C# 调用以下 C++ 函数(由 DLL 导出):

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

我找到了将原语从 C++ 编组到 C# 的文档,但我不确定如何处理引用类型或非原始类型,例如 VmLoader 或 OptionList(它们都是类)。我正在尝试用 C# 层包装 C++ API,将实际方法实现委托给底层 C++ 代码。

有任何想法吗?

4

2 回答 2

4

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

支持的是编写一个简单的 C 包装函数,该函数调用您的 C++ 函数。PInvoke 改为包装函数,这样就可以解决问题。

于 2009-04-24T20:29:00.747 回答
0

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

于 2009-04-24T21:44:08.523 回答