1
我只是想從C#中的DLL調用C函數。這個C函數返回一個結構體。以C#結構作爲返回值調用C函數
這裏的C DLL的.H文件聲明:
typedef struct t_Point{
int x;
int y;
} Point;
Point myFuncs();
現在我想用在C#中此功能。 Wrapper.cs:
using System.Text;
using System.Runtime.InteropServices;
namespace CSharp_mit_OpenCV
{
[StructLayout(LayoutKind.Sequential)]
public struct Point
{
public int x;
public int y;
};
class Wrapper
{
[DllImport("OpenCV Test.dll", CharSet= CharSet.Auto)]
[return: MarshalAs(UnmanagedType.Struct)]
public static extern Point myFuncs();
}
}
的用法如下:
Point p = Wrapper.myFuncs();
(命名可能不是最好的)
myFuncs只是聲明瞭一個結構,提出了一些值x和y返回它。問題:我在C#中獲得的值與在C函數中生成的值不同。它應該是4和2,它是0和111226272.這裏有什麼問題?
感謝您的幫助!
猜猜這是不同類型的東西:嘗試用C#'short'而不是'int',並嘗試用'uint'或'ushort'。你可以發佈進程輸出的字節(所以在C#試圖從他們創建一個結構之前)? – 2010-11-18 10:18:54
它總是返回111226272還是每次都不一樣? – 2010-11-18 11:23:45
不要忘記確保調用約定正確(cdecl/fast-call等)。請參閱:http://msdn.microsoft.com/en-us/library/system.runtime.interopservices.callingconvention.aspx – plinth 2010-11-18 13:46:22