【发布时间】:2011-07-21 02:54:22
【问题描述】:
我在 c++ DLL 中有一个具有以下原型的函数
int function(RefPar &params);
如何使用“DLLImport”从 c# 程序调用此函数。
当我像下面这样尝试时,AccessViolationException 在 Visual Studio 2008 中运行时发生..
[DllImport("VistaGMMDLL.dll", EntryPoint = "function"]
unsafe static extern int function(ref RefPar params);
并称为..
int ret=function(ref params);
注意:RefPar结构有很多 无符号整数值和 1 个枚举 作为其成员的价值。
请任何人帮助我正确调用该函数..
【问题讨论】:
-
我对编组为本机代码的经验很少,但您可能需要将其作为
IntPtr传递。您还必须非常小心如何在 C# 和 C++ 中定义结构,因为两种语言之间的结构布局/打包完全不同。 -
我正在使用 [StructLayout(LayoutKind.Sequential)] 进行布局打包。
-
我认为您可能还需要在 C++ 中使用一些特殊关键字来确保(可移植地)特定的对象布局。
标签: c# c++ dll reference parameter-passing