안녕하세요. C# 개발자인데 델파이 DLL을 적용시켜야 하는데
막히는 부분이 있어서 질문드립니다.
2주 전에 질문글 올렸는데 해결이 안되서요..
지난글
http://gall.dcinside.com/board/view/?id=programming&no=497758&page=1&search_pos=&s_type=search_all&s_keyword=dll
dll에서 써야하는 함수 인자가 string이고 return type이 integer입니다.
dll과 같이 온 문서에는 아래와 같이 정의 되어 있습니다.
function A(exe_path : string) : integer;
- exe_path : 실행파일 의 전체경로
- return : -1 or 0
c#에서 해당 함수를 쓰려고 string으로 인자를 줘서 호출해봤는데
[DllImport("Dio_dll.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)]
public static unsafe extern int A( string path);
string path = "C:\\ ... \\aaa.exe";
int ret = A(path)
"보호된 메모리를 읽거나 쓰려고 했습니다. 대부분 이러한 경우는 다른 메모리가 손상되었음을 나타냅니다."
라는 에러가 발생합니다.
CallingConvention 을 Cdecl/StdCall 으로 변경해도...
C#에서 string을 stringbuilder로 해도 같은 에러가 발생합니다.
혹시 델파이 dll을 생성할 때, build 환경에 관한 문의를 해야하는지
아니면 C#쪽에서 import 할때 다르게 해야하는지 잘 모르겠네요
도움 부탁드립니다.
string 을 경유하지 말고 A("C:\\..."); 로 바로 전달해도 안됨?
델파이는 대소문자를 안가리기 때문에 string 타잎이 아니라 내부 정의된 String 타잎일 수 있어. (AnsiString 이나 WideString)
A("C:\...");로 바로 해도 안되네요ㅠㅠ
https://social.msdn.microsoft.com/Forums/vstudio/en-US/4118ead9-5f15-4d54-bd7c-9a7380fa1145/call-a-delphi-dll-string-with-c-dllimport-and-marshalasattribute-returned-value-is-half?forum=csharpgeneral
DLL 제공업체에게 문의해보려고 하는데 뭘 물어보면 될까요? 빌드방식/string type 등등
걍 C# 에서 이런 이런 방법으로 호출해봤는데 안된다. 라고 그대로 문의해.
니네가 되는 코드를 보여주면 안되겠니? 라고.
그쪽서 쓰는 코드는 받았는데... 그쪽에서는 dll도 델파이 / dll을 쓰는 프로그램 언어도 델파이라서 참고가 안되요.
그니까 c# 코드를 달라 하라고 아니면 니가 저런예 참고해 풀던가
ㄴ던가->든가
redsun//안되요->안돼요
codesafer//타잎->타입
string 은 델파이 고유 AnsiString 이나 WideString 인거다. 차라리 인자를 *char char[] 로받는게 나을껀데.