1
이 코드에서 나를 도울 수 있습니까?.dll 메서드를 사용하면
을 :은 내가 아래의 코드에 따라 이러한 방법이 있지만 그 중 하나가 나에게 두통을 많이주고 ... 을 사용할 수 있습니다 ... 내 .DLL에 선언하는 방법을 사용하려면
main.h -> DLL
#ifndef _DLLTEST_H_
#define _DLLTEST_H_
#include <iostream>
#include <stdio.h>
#include <windows.h>
extern "C" __declspec(dllexport) void NumberList();
extern "C" __declspec(dllexport) void LetterList();
extern "C" __declspec(dllexport) int sumNumber(int, int);
#endif
MAIN.CPP -> DLL
#include "main.h"
#define MAXMODULE 50
using namespace std;
char module[MAXMODULE];
extern "C" __declspec(dllexport)
void NumberList() {
GetModuleFileName(NULL, (LPTSTR)module, MAXMODULE);
cout << "\n\nThis function was called from "
<< module
<< endl << endl;
cout << "NumberList(): ";
for(int i=0; i<10; i++) {
cout << i << " ";
}
cout << endl << endl;
}
extern "C" __declspec(dllexport)
void LetterList() {
GetModuleFileName(NULL, (LPTSTR)module, MAXMODULE);
cout << "\n\nThis function was called from "
<< module
<< endl << endl;
cout << "LetterList(): ";
for(int i=0; i<26; i++) {
cout << char(97 + i) << " ";
}
cout << endl << endl;
}
extern "C" __declspec(dllexport)
int sumNumber(int i, int j) {
cout << "Number: " << i + j << endl;
return i+j;
}
테스트 내 .DLL
#define MAXMODULE 50
using namespace std;
typedef void (WINAPI*cfunc)();
cfunc NumberList;
cfunc LetterList;
cfunc sumNumber;
int main() {
HINSTANCE hLib=LoadLibrary("libCriandoDLL.dll");
if(hLib==NULL) {
cout << "Unable to load library!" << endl;
getch();
}
char mod[MAXMODULE];
GetModuleFileName((HMODULE)hLib, (LPTSTR)mod, MAXMODULE);
cout << "Library loaded: " << mod << endl;
NumberList=(cfunc)GetProcAddress((HMODULE)hLib, "NumberList");
LetterList=(cfunc)GetProcAddress((HMODULE)hLib, "LetterList");
sumNumber=(cfunc)GetProcAddress((HMODULE)hLib, "sumNumber");
if((NumberList==NULL) || (LetterList==NULL) || (sumNumber==NULL)) {
cout << "Unable to load function(s)." << endl;
FreeLibrary((HMODULE)hLib);
}
NumberList();
LetterList();
sumNumber(1,1);
FreeLibrary((HMODULE)hLib);
getch();
}
"NumberList();" 및 "LetterList();" 그러나 완벽하게 작동합니다 ... "sumNumber (1.1)"메서드를 사용하려고하면 다음과 같은 오류가 발생합니다. "함수에 인수가 너무 많습니다."
실제로 DLL에서 선언되지 않기 때문에 'WINAPI'로 선언해서는 안됩니다. – Angew
'WINAPI'는'WinDef.h'에서'__stdcall'로 정의되었습니다 - 이것은 컴파일러에게 C 스타일의 호출 규칙을 사용하는 데 필요한 편리한 축약입니다 - DLL에 대해 올바르게, extern에 의해 암시됩니다 C ""다른 쪽 끝에서. –
'__stdcall'은 C와 C++ 함수가 기본적으로 사용하는'__cdecl'이 아닙니다. 'extern "C"''__stdcall'을 암시하는 참조가 있습니까? – Angew