У меня проблемы с импортом моих функций C ++. Если я объявлю их как функции C, я могу успешно импортировать их. При явной загрузке, если в какой-либо функции отсутствует внешний символ C, я получаю следующее исключение:
First-chance exception at 0x00000000 in cpp.exe: 0xC0000005: Access violation.
DLL.h:
extern "C" __declspec(dllimport) int addC(int a, int b);
__declspec(dllimport) int addCpp(int a, int b);
DLL.cpp:
#include "DLL.h"
int addC(int a, int b) {
return a + b;
}
int addCpp(int a, int b) {
return a + b;
}
main.cpp:
#include "..DLL/DLL.h"
#include <stdio.h>
#include <windows.h>
int main() {
int a = 2;
int b = 1;
typedef int (*PFNaddC)(int,int);
typedef int (*PFNaddCpp)(int,int);
HMODULE hDLL = LoadLibrary(TEXT("../Debug/DLL.dll"));
if (hDLL != NULL)
{
PFNaddC pfnAddC = (PFNaddC)GetProcAddress(hDLL, "addC");
PFNaddCpp pfnAddCpp = (PFNaddCpp)GetProcAddress(hDLL, "addCpp");
printf("a=%d, b=%d\n", a,b);
printf("pfnAddC: %d\n", pfnAddC(a,b));
printf("pfnAddCpp: %d\n", pfnAddCpp(a,b)); //EXCEPTION ON THIS LINE
}
getchar();
return 0;
}
Как импортировать функции с ++ для динамической загрузки? Я обнаружил, что следующий код работает с неявной загрузкой, ссылаясь на * .lib, но я хотел бы узнать о динамической загрузке.
Спасибо всем заранее.
Обновление:
bindump / export
1 00011109 ?addCpp@@YAHHH@Z = @ILT+260(?addCpp@@YAHHH@Z)
2 00011136 addC = @ILT+305(_addC)
Решение
- Создать структуру преобразования как
найдено здесь
Посмотрите на
экспортировать и явно копировать
Соглашение по присвоению имен в c ++.
PFNaddCpp pfnAddCpp = (PFNaddCpp) GetProcAddress (hDLL, "? AddCpp @@ YAHHH @ Z");