dllimport - 方法's型签名不是Pinvoke兼容

Rwkiii.

新成员
加入
2014年7月8日
消息
2
编程经验
10+
我已经提供了一个C ++ DLL,需要在我的C#项目中引用。我最接近的是使用DLL会产生一个例外:

"Method's型签名不是Pinvoke兼容."

这是一个简单的DLL,因为只有一个具有单个输入对象和单个输出对象的单个方法。输入和输出对象都完全是双倍和int,单个布尔值。这是我的代码:

C#:
[StructLayout(LayoutKind.Sequential)]
    public struct MyDLLInput
    {
    public int ProductModel;
             public int Length;
             public double Scale;
             public int CalculationMethod;

             [... additional double/int omitted for brevity ...]

   };

C#:
[StructLayout(LayoutKind.Sequential)]
    public struct MyDLLOutput
    {
             public int ProductModel;
             public int Length;
             public double Scale;
             public int CalculationMethod;
             public bool Warning_out_of_bounds;
             public double version;
    };

C#:
public class MYDLL
    {
[DllImport("MyDLLProductSelector.dll", 
                EntryPoint="[email protected]@YA?A[email protected]@[email protected]@@Z")]
        public static extern MyDLLOutput Unit(MyDLLInput UnitInput);
    }

我尝试称之为DLL的单位()方法:

C#:
MyDLLInput myDllInput = new MyDLLInput();

         MyDLLInput.ProductModel = 0;
         MyDLLInput.Length = 0;
         MyDLLInput.Scale = 85;  
         MyDLLInput.CalculationMethod = 85;
            
         MyDLLOutput myDllOutput = MYDLL.Unit(myDllInput);   <---- Exception thrown


C#:
"Method's型签名不是Pinvoke兼容."

我已经准备好了关于如何做到的话 - 有很多不同的方式。我看到许多问题发布在这种问题上,我已经读过每个问题。我完全迷失在我做错事或我需要另外做什么来制作这项工作。有谁会看到我需要做些什么来制作这项工作?
 

Rwkiii.

新成员
加入
2014年7月8日
消息
2
编程经验
10+
那个时髦的入口价值怎么了?我不使用大量的非托管代码,但我从未见过这样的东西。

完全同意,但显然有一个呼吁有一个术语"mangling"。与C ++或非托管DLL做事的方式有关。我知道它看起来不对,但这就是它使用依赖步行者的方式(依赖步行者(Depends.exe)主页)。
 
最佳 底部