【发布时间】:2011-02-25 21:13:24
【问题描述】:
我在一些我已经使用了一段时间的东西上遇到了这个奇怪的错误。这可能是 Visual Studio 2010 中的新事物,但我不确定。
我正在尝试从 C# 调用用 C++ 编写的未管理函数。
从我在互联网上阅读的内容和错误消息本身来看,这与我的 C# 文件中的签名与 C++ 中的签名不同这一事实有关,但我真的看不到它。
首先这是我下面的未管理功能:
TEngine GCreateEngine(int width,int height,int depth,int deviceType);
这是我在 C# 中的函数:
[DllImport("Engine.dll", EntryPoint = "GCreateEngine", CallingConvention = CallingConvention.StdCall)]
public static extern IntPtr CreateEngine(int width,int height,int depth,int device);
当我调试到 C++ 时,我看到所有参数都很好,因此我只能认为它与从 TEngine(它是一个名为 CEngine 的类的指针)到 IntPtr 的转换有关。我之前在VS2008中使用过这个没有问题。
【问题讨论】:
-
大家好,我面临同样的问题,但使用 Visual Studio 2013。我已将 c++ dll 的引用直接添加到我的 c# 项目中,该项目在 2010 年运行良好,但在 2013 年没有。我还提到了 CallingConvention .Cdecl
标签: c# c++ pinvoke unmanaged managed