XChat 2 возвращает «No xchat_plugin_init symbol» для библиотеки DLL

0

Я пишу 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. Не уверен. (FYI: Я немного новичок в написании DLL).

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

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

Файл определения плагина есть, но я не думаю, что он настроен должным образом. Невозможно добавить файл определения модуля.

Теги:
dll
visual-studio-2012
xchat2

1 ответ

-1

Функции, которые 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.

  • 0
    Я только что добавил extern "C" к трем определениям функций, но они все еще не отображаются в DLL. Кроме того, у меня есть файл def (хотя я не уверен точно, куда он идет). Я не уверен, что это отвечает на вопрос, но я мог бы сделать это неправильно.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню