私は後でSetWindowsHookEx()関数を使っていくつかのプロセスに注入したいDLLをビルドしようとしています。奇妙なことは、DLLをロードしようとしたときにGetProcAddressを使用してその中に含まれるプロシージャのアドレスを取得しようとすると、CBTメッセージ処理プロシージャのアドレスを取得しようとするとNULLが返されますが、他の機能。GetProcAddress()でDLLからいくつかの関数を読み込むことができません。
これはコードです。
DLL HEADER(.H)
#include <windows.h>
extern "C" {
__declspec(dllexport) LRESULT CALLBACK hookProc(int code, WPARAM wParam, LPARAM lParam);
__declspec(dllexport) int add(int a, int b);
}
DLLファイル(.CPP)私はただし、getlを使用している場合
#include "SimpleHook.h"
extern "C" {
__declspec(dllexport) LRESULT CALLBACK hookProc(int code, WPARAM wParam, LPARAM lParam) {
return CallNextHookEx(0, code, wParam, lParam);
}
__declspec(dllexport) int add(int a, int b) {
return a + b;
}
}
MAIN FILE
#include <iostream>
#include <windows.h>
#include <tchar.h>
int main(int argc, char* argv[]) {
HINSTANCE dllHandle = LoadLibrary(_T("SimpleHook.dll"));
if (dllHandle) {
// returns the correct address
cout << "add address: " << GetProcAddress(dllHandle, "add") << endl;
// returns NULL
cout << "hookProc address: " << GetProcAddress(dllHandle, "hookProc") << endl;
}
}
astError()私は127エラーコードを意味する:
ERROR_PROC_NOT_FOUND:指定されたプロシージャが見つかりませんでした。
奇妙なことは、同じファイルの他の機能が正しく読み込まれていることです。 ご迷惑をおかけして申し訳ございません。
これにより、 'GetProcAddress'はどのくらい正確に動作しますか? –
@Ben Voigt: '__cedcl'関数はまったく変換されません。私の主なポイントは、GetProcAddressを使用すべきではないということです。 – Puppy
すべての状況で単に 'GetProcAddress'の使用を避けることはできません。また、あなたは盲目的に呼び出し規約を変更することもできません。 –