dll을 작동 시키려고합니다.마샬링 C++ int *에서 C#
DLL은 C++로 작성되었으며 int *를 C#에 전달해야합니다. 나는이 일을하기 위해 며칠을 보냈고 실패했다. 내가 무엇이 잘못되었는지 알 수 없기 때문에 나는 머리카락을 꺼내기 시작했다. 나는 모든 것을 시도했다. 나는 C++에 익숙하지 않아서 C#에서 문제가 발생할 수 있습니다 ...
dll에서 정상적으로 읽었지만 반환 된 값이 올바르지 않습니다. 내가 입력을 제거하고, 나는 단지 테스트 배열을 통해 얻으려고 노력하고있다. 나는 C++에서 사용하고있는 기능은 다음과 같습니다
extern "C" EAGLE128DLL_API int* encryptFunc()
{
//return encrypt(x, Q);
int t[128];
for(int i = 0; i < 128; i++)
{
t[i] = 5;
}
return t;
};
C# 코드 나는 다음과 같이이 기능은 전화를 걸 때 사용 : 출력 배열 내에서
[DllImport("C:\\Users\\Leon\\Documents\\Visual Studio 2010\\Projects\\Eagle128DLL\\Release\\Eagle128DLL.dll")]
public static extern IntPtr encryptFunc();
...
IntPtr outputPtr = encryptFunc();
int[] output = new int[128];
Marshal.Copy(outputPtr, output, 0, 128);
값은 모두 5의를해야한다. 하지만 내가 얻을 수있는 것은 : 16187392, 16190224..etc (not 5 's)
[return : MarshalAs] 속성을 사용하여 IntPtr 대신 Int []를 반환하고 마샬 러가 작업을 수행 할 수있게해야합니다. [반환 : MarshalAs (UnmanagedType.LPArray, SizeConst = 128) ] 공공 정적 extern int [] encryptFunc(); – jeffora