2014-10-11 6 views
0

Я пытаюсь ввести dll в свой текущий процесс, чтобы найти смещения для разных функций.Получение функции PTR из DLL

У меня есть простая функция внутри моей DLL, которая выглядит следующим образом:

void testfunction() 

И им пытается получить функцию PTR через C# приложение.

public IntPtr GetFunctionPointer() 
    { 
     IntPtr hLoaded = LoadLibrary("C:\\test\\test.dll"); 
     IntPtr functionPtr = GetProcAddress(hLoaded, "testfunction"); 


     return functionPtr; 
    } 

Функция ptr возвращает 0 каждый раз, хотя функция существует внутри dll. Любая помощь будет оценена по достоинству.

+1

Экспортируется ли? –

+0

Вы имеете в виду __declspec (dllexport) void testfunction()? –

+0

Ну, это делает экспорт функции с измененным именем. Используйте 'dumpbin/exports' в своей DLL, чтобы увидеть фактические имена. Чтобы иметь контроль над экспортированным именем (запретить манипулирование), вам нужно будет использовать файл определения модуля. –

ответ

0

Функция не указана в вашей таблице экспорта DLL testfunction, она искажена с информацией о типе. Так что GetProcAddress не найдет его. (P/Invoke DllImportAttribute попытался целую кучу имен, которые могут найти его ... или нет. Но GetProcAddress требует точного совпадения.)

Чтобы экспортировать функцию, не коверкая на все, что вам нужно, чтобы уменьшить коверкая имени функции, используя extern "C", а затем также ссылку, используя файл определения модуля. Что-то вроде:

LIBRARY test 
EXPORTS 
testfunction 

Для получения полной информации см the MSDN documentation

+0

Мой человек, спасибо за информацию. –

Смежные вопросы