XChat 2 возвращает «Нет символа xchat_plugin_init» & quot; для библиотеки DLL

Я пишу плагин DLL для XChat 2 в C ++ (не используя классы). Когда я пытаюсь загрузить плагин через меню XChat Load Plugin, я получаю ответ:

Нет символа xchat_plugin_init; это действительно плагин xchat?

Я следовал за деталями, перечисленными на их плагин док, и вот как организован мой проект:

Headers
stdafx.h
targetver.h
xchat-plugin.h (XChat plugin header)

Source
dllmain.cpp (Unmodified from its default)
plugin.cpp
stdafx.cpp (contains default #include "stdafx.h")

Resources
plugin.def (as listed in the doc)

plugin.cpp там из-за инструкции по сборке Windows. Это содержит:

static int join_cb(char *word[], void *userdata)
void xchat_plugin_get_info(char **name, char **desc, char **version, void **reserved)
int xchat_plugin_init(xchat_plugin *plugin_handle, char **plugin_name, char **plugin_desc, char **plugin_version, char **arg)
int xchat_plugin_deinit(...

Как видите, я на самом деле делать иметь xchat_plugin_initтак почему же XChat не может его найти? Я не уверен, но я думаю, что проблема может быть связано с тем, как plugin.def Включено. Не уверен, хотя. (К вашему сведению: я новичок в написании DLL.)

Изменить: не похоже, что функции являются общедоступными … глядя через DLL Export Viewer, прототип функции не существует для xchat_plugin_init в моем, но он существует в других. Как сделать функции общедоступными?

Изменить 2: Похоже, есть два пути для этого: extern "C" и используя файл определения. extern "C" на самом деле, кажется, не делает функции видимыми извне, хотя я не уверен почему.

Файл определения плагина есть, но я не думаю, что он настроен правильно. Опция добавить файл определения модуля не существует.

0

Решение

Функции, которые будет вызывать XChat, должны быть объявлены extern "C":

extern "C" {
void xchat_plugin_get_info(char **name, char **desc, char **version, void **reserved);
int xchat_plugin_init(xchat_plugin *plugin_handle, char **plugin_name, char **plugin_desc, char **plugin_version, char **arg);
int xchat_plugin_deinit(...);
}

Это «разобьет» имена символов (как они будут в C), чтобы они соответствовали тому, что ищет XChat.

-1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]