해당 DLL을 C++에서 사용시엔 정상적으로 작동되나
C#에서 사용할때는 에러가 발생합니다
함수원형은 아래와 같습니다 (*모두다 출력값입니다)
int(__stdcall *pGetResult)(char *sIdtype, char *cID, char *cName, int 8NResult)
__________________________________________________________________________________
C++에서 아래와 같이 DLL을 불러와서 사용하면 정상작동 됩니다
gInstance = LoadLibrary("AAAAA.dll");
nret = pGetResult(stype,sID,sName,&nresult);
if(!nret){
str.Format("결과확인 ", stype, sID, sName, nresult);
AfxMessageBox(str);
}
__________________________________________________________________________________
C#에서는 에러가 발생합니다
[DllImport("AAAAA.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern int GetResult(ref string aa, ref string bb, ref string cc, ref int dd);
string sIdtype = "";
string cID = "";
string cName = "";
int iResult = 9;
int iOk = 9;
iOk = GetResult(ref sIdtype, ref cID, ref cName, ref iResult);
요렇게 사용하는데 에러가 발생합니다 ㅜㅜ;
__________________________________________________________________________________
에러내용은 아래와 같습니다
Invoke 함수 'TestDll!TestDll.Form1::GetResult'에 대한 호출 결과 스택이 불안정하게 되었습니다. 관리되는 PInvoke 시그니처와 관리되지 않는 대상 시그니처가 일치하지 않기 때문인 것 같습니다. 호출 규칙 및 PInvoke 시그니처의 매개 변수와 관리되지 않는 대상 시그니처가 일치하는지 확인하십시오.
public static extern int GetResult([MarshalAs(UnmanagedType.LPStr)] ref string sIdtype,
[MarshalAs(UnmanagedType.LPStr)] ref string cID,
[MarshalAs(UnmanagedType.LPStr)] ref string cName, ref int nResult);
요렇게도 해봤는데 안되네요 ㅠ,ㅠ;
데이터형을 맞춰줘야 될것같은걸 아는데 도통 감을 못잡겠습니다
[최초 등록일: ]
[최종 수정일: 3/15/2017]