Мой код:
dll:
#include "stdafx.h"
#include <iostream.h>
extern "C" __declspec(dllexport) void F1()
{
cout << "It works\n";
}
extern "C" __declspec(dllexport) int F2()
{
return 154827;
}
extern "C" __declspec(dllexport) void F3(int n)
{
cout << "It works: "<<n<<"\n";
}
extern "C" __declspec(dllexport) int F4(int n)
{
return n+1;
}
консольное приложение:
#include "stdafx.h"
#include <windows.h>
#include <iostream.h>
#include <stdio.h>
#include <conio.h>
typedef void (WINAPI*f1)();
typedef int (WINAPI*f2)();
typedef void (WINAPI*f3)(int);
typedef int (WINAPI*f4)(int);
#define MAXMODULE 50
f1 F1;
f2 F2;
f3 F3;
f4 F4;
void main(int argc, char* argv[])
{
HINSTANCE hLib=LoadLibrary("dllll.dll");
if(hLib==NULL)
{
cout << "Unable to load library!" << endl;
getch();
return;
}
char mod[MAXMODULE];
GetModuleFileName((HMODULE)hLib, (LPTSTR)mod, MAXMODULE);
cout << "Library loaded: " << endl;
F1=(f1)GetProcAddress((HMODULE)hLib, "F1");
F2=(f2)GetProcAddress((HMODULE)hLib, "F2");
F3=(f3)GetProcAddress((HMODULE)hLib, "F3");
F4=(f4)GetProcAddress((HMODULE)hLib, "F4");
if((F1==NULL) || (F2==NULL) || (F3==NULL) || (F4==NULL)) {
cout << "Unable to load function(s)." << endl;
FreeLibrary((HMODULE)hLib);
return;
}
F1();
cout<<F2()<<endl;
F3(1515);
cout << F4(12) << endl; //works now :)
FreeLibrary((HMODULE)hLib);
getch();
return;
}
Вывод:
Library loaded:
154827
It works
It works: 1515
Вопросы:
1. Почему F1 отображается после F2?F1 вызывается раньше F2.
2. F3 Работает правильно, но заставляет окно всплывать дважды.Я нажимаю Игнорировать на нем.
http://s3.ifotos.pl/img/f3_hwpwapq.jpg
3. Почему F4 вообще не работает?Это поднимает исключение.
РЕДАКТИРОВАТЬ:
Теперь вопросы 2 и 3. решены.
Для 1 теперь вывод:
Library loaded:
154827
13
It works
It works: 1515
По порядку: F2, F4,F1, F3.
Я называю их: F1, F2, F3, F4.
Почему это происходит?