C DLL - VBA간 String 주고받기에 관한 문제입니다.
갤2
사실 제목에 질문이 다 들어있긴 합니다만.
제가 금융공학쪽 공부를 좀 하게 되다보니 VBA를 피할수는 없더군요.
원래 언어쪽은 한번씩 다 건드려보다보니 비주얼한 프로그래밍은 힘들지만
이것저것 알려주면 잘 줏어먹는 편이기는 한지라 고생은 하지 않고 있습니다만,
늘 라이브러리 없는 직관적-_-인 프로그래밍만 하다가
DLL과 VBA를 연동하는 작업을 진행하고 있습니다.
VBA(VB)에서 ByVal String으로 던져주면 DLL쪽에서는 char*로 잘 줏어먹기는 하는데
그 반대의 경우가 참 난감하더군요.
DLL쪽에서 무언가 String을 만들어서 던져주게 되면 char*로 날아오게 되는데
상식적으로 생각해보면 ByRef인데 이렇게 설정하나 저렇게 설정하나
무조건 엑셀이 죽어버리는군요. ㅎㅎㅎ
제가 취한 대략의 전략은 이렇습니다.
VBA쪽은,
...
Public Declare Function BlahBlah Lib c:\메롱\내가누구게.dll (ByVal/ByRef TakeBack As String) As Integer
...
내가누구게-_-.dll쪽은,
extern C __declspec(dllexport) __int16 _stdcall BlahBlah(char* TakeBack) {
strcpy(TakeBack, :P);
return 1;
}
대략 이 정도인데요.
무언가 상쾌하고 뾰족한 수가 없을까요?
아, VS쪽 프로젝트는 Win32 DLL 빈 프로젝트를 만들어서 필요한 파일들을 직접 작성하여 Release모드로 컴파일하였습니다.
현재 보이는 증상은 엑셀이 죽-_-는군요. ㅎㅎ
사실 삽질하면 알아내기야 하겠습니다만, 고수님께 명쾌한 해설이 듣고 싶어서 질문 드립니다요!
미리 캄솨캄솨드립니다. _(_ _)_
-
아이돌 2025-03-02
1
-
블레이 2025-03-02
정성어린 관심에 감사드립니다 ㅎㅎ
-
쥬디시어스 2025-03-02
VBA는 안해봐서.. 패스...ㅡㅡ;
전 엑셀 사용할일 있으면 그냥 파일저장할때 CSV파일로 저장하고 ,를 써주면 엑셀에서 읽어진다는...
걍 이렇게 꼼수로 활용만 해서리... 도움이 못되어서 쩝.ㅠ_ㅠ;;