Есть много способов сделать это, но я думаю, что один из самых простых вариантов - это связать приложение с DLL во время соединения, а затем использовать файл определения , чтобы определить символы, которые будут экспортированы из DLL.
CAVEAT: Подход с использованием файла определения работает лучше всего для недекорированных имен символов. Если вы хотите экспортировать декорированные символы, то, вероятно, лучше НЕ ИСПОЛЬЗОВАТЬ подход файла определения.
Вот простой пример того, как это делается.
Шаг 1: Определите функцию в файле export.h .
int WINAPI IsolatedFunction(const char *title, const char *test);
Шаг 2: Определите функцию в файле export.cpp .
#include <windows.h>
int WINAPI IsolatedFunction(const char *title, const char *test)
{
MessageBox(0, title, test, MB_OK);
return 1;
}
Шаг 3: Определите функцию как экспорт в файле определения export.def .
EXPORTS IsolatedFunction @1
Шаг 4: Создайте проект DLL и добавьте к этому проекту файлы export.cpp и export.def . Построение этого проекта создаст export.dll и файл export.lib .
Следующие два шага ссылаются на DLL во время ссылки. Если вы не хотите определять точки входа во время соединения, игнорируйте следующие два шага и используйте LoadLibrary и GetProcAddress для загрузки точки входа функции во время выполнения.
Шаг 5: Создайте Test проект приложения для использования dll, добавив в проект файл export.lib . Скопируйте файл export.dll в то же место, где находится исполняемый файл консоли Test .
Шаг 6: Вызвать функцию IsolatedFunction из приложения Test, как показано ниже.
#include "stdafx.h"
// get the function prototype of the imported function
#include "../export/export.h"
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
// call the imported function found in the dll
int result = IsolatedFunction("hello", "world");
return 0;
}