Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> DLL экспорт функции, #define DllExport extern "С" __declspec 
:(
    Опции темы
cupper
Дата 17.10.2008, 10:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 525
Регистрация: 29.11.2006

Репутация: нет
Всего: 1



OpenPassDLL.h
Код

// Macro for DLL exports in Win32, replaces Win16 __export
// (Макрос для экспорта DLL в Win32 вместо 16-битной версии)
#define DllExport extern "С" __declspec(dllexport)

// Prototype
// (Прототип)
DllExport void RunStopHook(bool State, HINSTANCE hInstance);



Код

// OpenPassDLL.cpp : Defines the entry point for the DLL application
// OpenPassDLL.cpp : Определяет точку входа для DLL-приложение

#include <windows.h>
//#include "stdafx.h"
#include "OpenPassDLL.h"

HHOOK SysHook;
HWND Wnd;
HINSTANCE hInst;

BOOL APIENTRY DllMain( HANDLE hModule, 
                       DWORD  ul_reason_for_call, 
                       LPVOID lpReserved
                     )
{
    hInst=(HINSTANCE)hModule;
    return TRUE;
}

LRESULT CALLBACK SysMsgProc(

    int code,        // hook code (код ловушки)
    WPARAM wParam,    // removal flag (флаг)
    LPARAM lParam    // address of structure with message
            // (адрес структуры с сообщением)
   )
{
    //Передать сообщение другим ловушкам в системе
    CallNextHookEx(SysHook, code, wParam, lParam);

    //Проверяю сообщение
    if (code == HC_ACTION)
    {
        //Получаю идентификатор окна сгенерировавшего сообщение
        Wnd=((tagMSG*)lParam)->hwnd;

        //Проверяю тип сообщения. 
        //Если была нажата левая кнопка мыши 
        if (((tagMSG*)lParam)->message == WM_RBUTTONDOWN)
        {
            SendMessage(Wnd, EM_SETPASSWORDCHAR, 0, 0); 
            InvalidateRect(Wnd, 0, true);
        }
    }

    return 0;
}

///////////////////////////////////////////////////////////////////

DllExport void RunStopHook(bool State, HINSTANCE hInstance)
{
    if (true)
        SysHook = SetWindowsHookEx(WH_GETMESSAGE, &SysMsgProc, hInst, 0);
    else
        UnhookWindowsHookEx(SysHook);
}


Хочу создать длл, пример взял из книжки, рробовал на VS2005 и Dev++ везде жалуеться на строку 
Код

#define DllExport extern "С" __declspec(dllexport)

и именно на 
Код

extern "С"

пробывал различные монипуляци, но либо жалуеться на етуже сторчку, а если без нее то Build error...
почему так ? че такая техника уже неработает ? встречал на форуме много таких тем но невкоторой не нашел решение своей проблемы... ((
PM MAIL   Вверх
Lazin
Дата 17.10.2008, 11:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 8
Всего: 154



Цитата(cupper @  17.10.2008,  10:52 Найти цитируемый пост)
DllExport void RunStopHook(bool State, HINSTANCE hInstance);

поменяй на 
Код

void DllExport RunStopHook(bool State, HINSTANCE hInstance);

PM MAIL Skype GTalk   Вверх
cupper
Дата 17.10.2008, 11:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 525
Регистрация: 29.11.2006

Репутация: нет
Всего: 1



error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 
error C4430: missing type specifier - int assumed. Note: C++ does not support default-int (на cpp)
и еще добавилось 5 варнингов
PM MAIL   Вверх
Lazin
Дата 17.10.2008, 11:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 8
Всего: 154



может extern "C" убрать из дефайна, а вместо этого использовать
Код

extern "C"
{
void DllExport Foo();
...
};

PM MAIL Skype GTalk   Вверх
cupper
Дата 17.10.2008, 12:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 525
Регистрация: 29.11.2006

Репутация: нет
Всего: 1



Код

extern "C"
{
#define DllExport __declspec(dllexport)

DllExport void RunStopHook(bool State, HINSTANCE hInstance);
}


Код

Compiling...
1.cpp
Linking...
mfcs80ud.lib(dllmodul.obj) : error LNK2005: _DllMain@12 already defined in 1.obj
   Creating library C:\Documents and Settings\Sergeev\Рабочий стол\testWINAPI\1\Debug\1.lib and object C:\Documents and Settings\Sergeev\Рабочий стол\testWINAPI\1\Debug\1.exp
C:\Documents and Settings\Sergeev\Рабочий стол\testWINAPI\1\Debug\1.dll : fatal error LNK1169: one or more multiply defined symbols found
Build log was saved at "file://c:\Documents and Settings\Sergeev\Рабочий стол\testWINAPI\1\1\Debug\BuildLog.htm"
1 - 2 error(s), 0 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========


Cpp  фаел неизменял, сяс в VS2005 компилю, мож да ДЕВ и бует работать но на VS бородит
PM MAIL   Вверх
Andrey44
Дата 17.10.2008, 14:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1501
Регистрация: 4.12.2006
Где: На работе

Репутация: 8
Всего: 26



Код

#ifdef EXPORTING
#define MYIMPORTS __declspec(dllimport)
#else
#define MYIMPORTS __declspec(dllexport)
#endif

#define CFUNC extern "C"

CFUNC MYIMPORTS void RunStopHook(bool State, HINSTANCE hInstance);


Это сообщение отредактировал(а) Andrey44 - 20.10.2008, 09:19


--------------------
????? ??, ??????? ?????.  smile 
PM MAIL WWW ICQ   Вверх
jonie
Дата 19.10.2008, 23:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 7
Всего: 118



Цитата

mfcs80ud.lib(dllmodul.obj) : error LNK2005: _DllMain@12 already defined in 1.obj
MFC и CRT одновременно ?
http://support.microsoft.com/kb/148652
или исши где у тебя два раза ДллМаин есть


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
cupper
Дата 20.10.2008, 10:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 525
Регистрация: 29.11.2006

Репутация: нет
Всего: 1



Цитата(Andrey44 @ 17.10.2008,  14:01)
Код

#ifdef EXPORTING
#define MYIMPORTS __declspec(dllimport)
#else
#define MYIMPORTS __declspec(dllexport)
#endif

#define CFUNC extern "C"

CFUNC MYIMPORTS void RunStopHook(bool State, HINSTANCE hInstance);

DEV++ оказываеться тоже самое пишет при создании проекта, работает, покрайней мере компилиться ), на счет 2-х майнов ето скорее проста из за сокрой работы в VS, у которого сови причуды.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.0769 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.