У меня есть стороннее приложение, которое позволяет вам вызывать функции C из DLL-файлов. Приведенный пример этого приложения показывает, что вы можете позвонить в MessageBoxW из user32.dll. Это также позволяет вам вызывать функции C из ваших файлов DLL.
Я сделал DLL из файла file.h следующим образом:
_declspec (dllexport) void example(int);
и file.c вот так:
#include <stdio.h>
#include "file.h"
_declspec (dllexport) void example(int s1)
{
printf("dsa");
}
И скомпилируйте его с помощью компилятора C / C ++ версии 15 из Windows SDK следующим образом:
cl file.c /DLL /LD
И я получаю правильную компиляцию с файлом DLL. В экзаменаторе функций DLL я вижу свою функцию. Я помещаю этот файл в папку System32 и вызываю его из стороннего приложения.
Приложение находит файл, но не может найти функцию.
Я думаю, что причиной проблемы является то, что я объявляю (или компилирую) свою DLL другим способом / способом / стандартом, что библиотеки Windows (например, user32.dll), потому что user32.dll работает нормально.
Я обнаружил, что стороннее приложение использует такие функции вызова в DLL:
winapi_abi Используется для вызова системных функций Windows. Это
объявлен как stdcall в Windows, но не имеет искаженных имен.
Итак, мой вопрос: как подготовить и скомпилировать файл DLL способом user32.dll (stdcall?), Чтобы он работал со сторонним приложением?