Функция не найдена [Ошибка 127] - PullRequest
1 голос
/ 21 августа 2011

Я написал DLL, содержащую процедуру подключения.Я пытаюсь вызвать эту функцию после загрузки (с успехом) dll, но результат равен 0, а результат GetLastError 127. Я использую Visual Studio C ++, и это код:

dll:

#include <windows.h>

__declspec(dllexport) LRESULT CALLBACK CBTFrenk(int nCode, WPARAM wParam, LPARAM lParam){...}

myapp:

#include <Windows.h>

int _tmain(int argc, _TCHAR* argv[])
{   
    HINSTANCE hdll = LoadLibrary((LPCTSTR) L"C:\\Users\.....DllForHook.dll");
    wprintf(L"%d\n", GetLastError());
    HOOKPROC pfunc = (HOOKPROC)GetProcAddress(hdll, "CBTFrenk");
    wprintf(L"%d\n", GetLastError());
    HHOOK handleToAHook = SetWindowsHookEx(WH_CBT, pfunc, hdll, 0);
    return 0;
}

Спасибо за сотрудничество.

edit:

    00000000 characteristics
    4E515E9D time date stamp Sun Aug 21 21:38:05 2011
        0.00 version
           1 ordinal base
           1 number of functions
           1 number of names

    ordinal hint RVA      name

          1    0 00011005 ?CBTFrenk@@YGJHIJ@Z = @ILT+0(?CBTFrenk@@YGJHIJ@Z)

  Summary

        1000 .data
        1000 .idata
        2000 .rdata
        1000 .reloc
        1000 .rsrc
        4000 .text
       10000 .textbss

Это результат работы с dumpbin, почемуимя моей функции так странно?

Редактировать:

    00000000 characteristics
    4E520C85 time date stamp Mon Aug 22 10:00:05 2011
        0.00 version
           1 ordinal base
           1 number of functions
           1 number of names

    ordinal hint RVA      name

          1    0 0001107D _CBTFrenk@12 = @ILT+120(_CBTFrenk@12)

  Summary

        1000 .data
        1000 .idata
        2000 .rdata
        1000 .reloc
        1000 .rsrc
        4000 .text
       10000 .textbss

Я объявил CBTFrenk как extern "C", и, вызывая "_CBTFrenk @ 12", это работает.

РЕДАКТИРОВАТЬ:

Я написал код DLL с code :: block, и с помощью dumpbin я вижу, что экспортируемое имя функции - "CBTFrenk @ 12", и если я пытаюсь вызвать его,результат функции не найден.Как я могу решить эту проблему?

1 Ответ

2 голосов
/ 21 августа 2011

Попробуйте dumpbin с библиотекой DllForHook, чтобы увидеть, существует ли функция CBTFrenk.Объявите CBTFrenk как внешний "C", чтобы предотвратить искажение имени в C ++.

...