티스토리 뷰
C#으로 응용 프로그램을 제작하는 과정에서 모든 라이브러리가 C# 닷넷 라이브러리로 제작되어 있다면 사용도 디버깅도 편리한 장점이 있지만 현실은 아직 언어들 예를들어 C++이나 기타 언어로 만들어진 DLL을 사용해야 되는 경우가 종종 발생합니다.
PInvokeStackImbalance' 관리 디버깅 도우미가 '.........vshost.exe'에서 문제를 발견했습니다.
추가 정보: PInvoke 함수 '..........::SMSUnitSend'에 대한 호출 결과 스택이 불안정하게 되었습니다. 관리되는 PInvoke 시그니처와 관리되지 않는 대상 시그니처가 일치하지 않기 때문인 것 같습니다. 호출 규칙 및 PInvoke 시그니처의 매개 변수와 관리되지 않는 대상 시그니처가 일치하는지 확인하십시오.
extern "C" __declspec(dllimport) int SMSUnitSend(char *UserCode, char *UserName, char *DeptCode, char *DeptName, char *ReqPhone1, char *ReqPhone2, char *ReqPhone3, char *CallName, char *CallPhone1, char *CallPhone2, char *CallPhone3, char *CallMessage, char *RDate, char *RTime, long dwCallNo);
DLL에 있는 함수들에 대상 함수의 원형은 위의 코드와 같습니다. 파라미터로 문자열의 포인터들과 long형의 값을 받는 함수로 C#에서 해당 함수를 호출하려면 "using System.Runtime.InteropServices;"를 추가해 주고 다음과 같은 선언 작업도 필요합니다.
[DllImport("AppSMSCall.dll", CallingConvention = CallingConvention.Cdecl)] public static extern int SMSUnitSend(string UserCode, string UserName, string DeptCode, string DeptName, string ReqPhone1, string ReqPhone2, string ReqPhone3, string CallName, string CallPhone1, string CallPhone2, string CallPhone3, string CallMessage, string RDate, string RTime, long dwCallNo);
char * 포인터 대신에 string으로 변환한것 빼고는 함수 원형과 크게 다르지 않습니다. 오류가 발생할 원인은 "[DllImport("AppSMSCall.dll")]" 부분에 있었습니다. 이전 코드에는 CallingConvention을 지정하지 않았던 것입니다. C++ 코드의 경우 Cdecl을 사용하고 델파이등으로 만들어진 DLL은 StdCall로 지정하면 됩니다.
'프로그래밍' 카테고리의 다른 글
Note: Recompile with -Xlint:deprecation for details. 경고 처리 요령 (0) | 2017.02.06 |
---|---|
C# 닷넷으로 구글/네이버 메일(SMTP) 보내기 (0) | 2017.01.19 |
실습으로 배우는 C언어 3 - 아스키(ASCII) 테이블 (0) | 2017.01.10 |
실습으로 배우는 C언어 2 - 달력 출력하기 (0) | 2017.01.02 |
배포 배키지로 Web API 응용을 IIS에 게시하기 (0) | 2016.12.28 |
- 런타임 에러 76은 경로를 찾을수 없다는 메시지 이군요. 입력하신 경로를⋯
- Set folder = fso.GetFolder(sFolder) 에서 런⋯
- [승인대기]
- 표준 시간은 제주 올레 홈페이지를 참조하시는 것이 좋을듯 하네요. 이 포⋯
- 안녕하세요. 리뷰 감사해요 소요시간이 어떻게 되나요? 저도 가보려고요
- 제주 올레길 / 까미노 데 산티아고 길 을 가봤는데 아직 해파랑 남파⋯
- 아 오르세... 제 가 갔을땐 실내 촬영이 안됬는데 지금은 된다고 하지요⋯
- 법환 포구 빌라 자리엔 원래 각종 맛집들이 있엇는데 말이죠.. 싹 밀어서⋯
- 리눅스의 쉘 환경과 같은 준비를 해주는 것으로 이해하면 좋을듯 합니다. ⋯
- 안녕하세요.. 야라바님 초면에 갑작스럽겠지만 제 생명의 은인입니다. T⋯