음.. 델파이 DLL을 c# 에서 써야하는데.. 내가 델파이를 몰라
dll에서 써야하는 함수 인자가 string이고 return type이 integer이야
function A(string): integer;
c#에서 해당 함수를 쓰려고 string으로 인자를 줘서 호출해봤는데
DLLImport public static unsafe extern int A( string B);
string B = "aaaaaaa";
int ret = A(B)
"보호된 메모리를 읽거나 쓰려고 했습니다. 대부분 이러한 경우는 다른 메모리가 손상되었음을 나타냅니다." 라는 에러가 떠
c#에서 델파이 string으로 쓰는 인자를 뭘로 써야해?
아님 위 에러 해결방법 아는사람?
델파이 내부에서 사용하는 스트링은 대문자 S 일텐데. 델파이는 대소문자를 가리지 않지만, DLL 익스포터에서 한번 더 확인해 봐라.
그리고 대문자 S 로 시작하는 String 은, WideString 이거나 AnsiString 이거나, 둘 중 하난데 전자는 2바이트 문자열, 후자는 1바이트 단위 문자열이니,
델파이 DLL을 빌드할때 어떤 옵션으로 빌드했는지 확인해야 해.
두 경우 모두 string 타잎을 바로 인지하지 못할텐데, 그리고 pascal call 을 써야할 것 같고.
http://stackoverflow.com/questions/4163364/calling-a-delphi-dll-from-a-c-sharp-net-application
http://stackoverflow.com/questions/11824738/how-to-pass-string-from-c-sharp-to-delphi-dll-function
stdcall calling convension 을 쓰라고 하네.
고마워요 확인해볼께요!
비베건 델파이건 모두 stdcall 방식을 씀. 파스칼(델파이)에서 쓰는 calling convention이라고 해서 stdcall을 pascall이라고 부르기도 했지.
아 생각해 보니 stdcall랑 pascal 방식은 인자 푸시 순서가 다르구나. ㅋㄷㅋㄷ 근데 Win32 Programming에서는 PASCAL == WINAPI(__stdcall)