0
我有一個包含返回結構和字節的功能的DLL,和7倍的陣列的陣列:進口C++ DLL,返回一個結構與雙打
public struct myStruct
{
public byte v1;
public Blob v2;
}
的DLL功能:
[DllImport("myDLL", EntryPoint = "[email protected]@[email protected]@XZ", ExactSpelling = true)]
public static extern MyStruct myDLLFunction();
這是我的blob:
[StructLayout(LayoutKind.Sequential, Size = ((sizeof(double))*7))]
public struct Blob
{
// Intentionally left empty. It's just a blob
}
我創建了一個函數來獲取數組:
public double[] GetArray(Blob NameBlob)
{
IntPtr dPtr = IntPtr.Zero;
try
{
dPtr = Marshal.AllocHGlobal(((sizeof(double))*7));
Marshal.StructureToPtr(NameBlob, dPtr, false);
double[] r = new double[((sizeof(double))*7)];
Marshal.Copy(dPtr, r, 0, ((sizeof(double))*7));
return r;
}
finally
{
if (dPtr != IntPtr.Zero)
{
Marshal.FreeHGlobal(dPtr);
}
}
}
我把它叫做是這樣的:
myStruct s1=myDLLFunction();
GetArray(s1.v2)[0]; // print it
我得到錯誤的值,請如果有人能幫助我,將是巨大的,我說明使用元帥......我想有是我做錯了的地方。
PS:我不能改變Dll,它不是我的 – user1928596
歡迎來到SO。只是你知道,你可以編輯你自己的帖子,所以你不必添加註釋=) –
StructureToPtr()在結構沒有任何字段時不做任何事情。您需要聲明數組,使用MarshalAs將其聲明爲ByvalArray。 –