2012-06-25 32 views
1

如果這是重複的,我表示歉意。我在寫一個需要與舊的C++非託管dll交互的類。還有一個,我有託管代碼很難映射方法:PInvoke和double *

long DoSomething(int id, double* points, long numberOfPoints, bool useShaping) 

我一直這樣遠遠無法映射到不拋出一個堆棧不平衡例外一個外部方法。問題在於雙指針。託管代碼中查找方法簽名的方法是什麼?以下是我嘗試過的方法,並不能作爲一個例子。

[DllImport("Something.Dll", EntryPoint = "DoSomething")] 
public static extern long DoSomething(int id, double[] points, long numberOfPoints, bool useShaping) 
+0

你需要消耗指向指向雙? – n8wrl

+0

這是PInvoke,而不是COM interop ... –

+0

首先,你需要弄清楚調用約定。它是'stdcall'還是'cdecl'?如果你把這些混在一起,通話本身就會起作用,但是在.net 4上,你會得到一個不平衡的堆棧異常。 – CodesInChaos

回答

4

有可能兩個問題 -

  1. 這最有可能需要指定調用約定。
  2. 「長」 在C++映射到C# 「INT」

嘗試以下操作:

[DllImport("Something.Dll", EntryPoint = "DoSomething", CallingConvention=CallingConvention.Cdecl)] 
public static extern int DoSomething(int id, double[] points, int numberOfPoints, bool useShaping); 
+0

調用約定似乎是這裏的私刑。在我的情況下,我需要將其設置爲StdCall。感謝大家的快速反應。我顯然沒有經驗與pinvoke。 – user653649