비주얼 베이직에서 정규 dll을 호출할 수록 되어있다.
하지만 모든 함수를 호출 할 수 있는것은 아니고, 비베의 경우 STDCALL 형식으로 정의된 함수만 호출이 가능하다.
다음은 정규 DLL을 만들어서 비베에서 호출하는 예이다.
--------------------------------------------------------------------------------
(1)
VC++에서 dll을 만드는 방법 1. new → projects → Win32 Dynamic-Link Library, 프로젝트 이름(예 : MyDll)
*.cpp(c언어 파일), *.def(정의 파일) 파일을 하나 만든다. (이때, *.def파일의 이름은 프로젝트 이름과 같아야 한다. 위에서는 MyDll.def) work- space-docked-window에서-file-view탭을-선택하신후-source-files에-오른쪽-마우스를-클릭하신후 -add-files-to-folder를-선택하시고-파일-형식을-definition-files-.def-로-선택하고-원하시는-이름을 -입력하시면-됩니다}
*.cpp 파일에 다음 코드를 넣는다.
첫번째 방법,(모두 다됨)
#include <windows.h>
long CALLBACK addition(long a, long b){
return a+b;
}
long CALLBACK subtract(long a, long b){
return a-b;
}
두번째 방법,(윈도우즈, vc++ 컴파일러만 됨)
long stdcall addition(long a, long b){ return a+b; } long stdcall subtract(long a, long b){
return a-b;
}
4. .def에 다음 코드를 넣는다. LIBRARY “MyDll” // 프로젝트이름을 적어줘야 함! 꼭! DESCRIPTION “MyDll 예제입니다.”
HEAPSIZE 1024
EXPORTS
addition @1
subtract @2
5. 컴파일을 한다!!! MyDll.dll 이 debug 폴더에 생성될것이다~
(2) VB에서 만들어진 MyDll.dll 을 사용하는 방법 프로젝트를 열고, 모듈에 다음과 같이 선언한다.
Declare Function addition lib “C:\project\MyDll\Debug\MyDll.dll” (ByVal A As Long, ByVal B As Long) As Long Declare Function subtract lib “C:\project\MyDll\Debug\MyDll.dll” (ByVal A As Long, ByVal B As Long) As Long
그리고 사용 방법은 간단하다.
a = 100 b = 200 c = addition(a,b) d = subtract(a,b)
--------------------------------------------------------------------------------
여기까지, 그리고 비주얼 베이직에서는 다음과 같이 사용해서 함수 이름도 바꾸어서 사용할 수 있다.
선언예: Declare Function addtwo lib “C:\project\MyDll\Debug\MyDll.dll” Alias “addition” (ByVal A As Long, ByVal B As Long) As Long
사용예: c = addtwo(100,200)
주의할 사항은 c에서는 여러가지 데이터 형이 있는데, 외부에 공개할 함수의 경우 되도록이면 표준 데이터 형을 이용해야 한다.
unsigned char, short, long, safearray, BSTR 등..
그 리고 파라메터를 넘길때 Call By Value 방식과 Call By Reference 방식이 있는데 값을 넘기느냐, 포인터를 넘기느냐의 차이다. 만약 C에서 long a 형식으로 파라메터를 받는다면 Call By Value이므로 비주얼 베이직에서는 ByVal A As Long 으로 써줘야 하고 C에서 long *a 형식으로 파라메터를 받는다면 Call By Reference이므로 비주얼 베이직에서는 ByRef A As Long 으로 써주면 된다.
이렇게 하여, 비주얼 베이직에서도 C 에서 만든 유용함 함수들을 사용할 수 있게 되는것이다!
--------------------------------------------------------------------------------
함수 전달 인자는 byval로 하시면 되고,
변수 Outputstr은 문자열의 크기를 정해서 넘겨줘야 합니다.
예) Outputstr = ” ”, 또는
dim Outputstr as string * 256
* 참고로 넘겨받을수 있는 문자열의 길이는 256바이트를 넘길수 없습니다.
즐거운 프로그래밍 하시기 바랍니다.
--------------------------------------------------------------------------------
C 언어의 데이터 형 비주얼 베이직의 데이터 형 전달 방법
Integer Integer ByVal
Integer Pointer(LPINT) Integer ByRef
Long Long ByVal
Long Integer Pointer Long ByRef
String Pointer(LPSTR) String ByVal
Handle Long ByVal
Char String ByVal
Void Pointer Any ByRef