как обойтись без def файла?
От: verdina  
Дата: 06.02.08 18:03
Оценка:
кусок кода из моей программы на MFC
HMODULE hM = NULL;
    typedef   __declspec(dllimport) void WINAPI HF(void);
    HF* myF = NULL;
    hM = AfxLoadLibrary("MyDll");//загрузка библиотеки

    if (hM!=NULL)//если загрузили
    {
        myF=(HF*)GetProcAddress(hM,"Hello");//получаем адрес функции
        if (myF!=NULL)
        {
            (*myF)();//вызов функции если удалось

        }
        else
        m_MessageStatic.SetWindowText("Error Load function" );

        AfxFreeLibrary(hM); //выгузка библиотеки
    }
    else m_MessageStatic.SetWindowText("Error load Dll");

если def файла нет то функция GetProcAddress() не видит функцию из dll-ки
есть ли способ обойтись без def файла?




вос сама библиотека что в ней не так?
MyDll.h

#pragma once
#include "stdafx.h"

#ifdef MYDLL_EXPORTS
#define MyExpFunc  extern "C" __declspec(dllexport)
#else
#define MyExpFunc extern "C" __declspec(dllimport)
#endif

MyExpFunc void WINAPI Hello(void);

MyDll.cpp

#include "stdafx.h"
#include "MyDll.h"


#ifdef _MANAGED
#pragma managed(push, off)
#endif

BOOL APIENTRY DllMain( HMODULE hModule,
                       DWORD  ul_reason_for_call,
                       LPVOID lpReserved
                     )
{
    

    return TRUE;
}

#ifdef _MANAGED
#pragma managed(pop)
#endif

MyExpFunc void WINAPI Hello(void)
{
    MessageBoxA(NULL,"Hello","Hello",MB_OK);
}

Склеил два сообщения в одно, чтобы не размазывать по веткам. — Кодт


10.02.08 04:03: Перенесено модератором из 'C/C++' — Павел Кузнецов
Re: как обойтись без def файла?
От: remark Россия http://www.1024cores.net/
Дата: 06.02.08 18:07
Оценка:
Здравствуйте, verdina, Вы писали:

V>если def файла нет то функция GetProcAddress() не видит функцию из dll-ки

V>есть ли способ обойтись без def файла?

Пометь экспортируемую функцию в dll как __declspec(dllexport)


1024cores — all about multithreading, multicore, concurrency, parallelism, lock-free algorithms
Re: как обойтись без def файла?
От: c-smile Канада http://terrainformatica.com
Дата: 06.02.08 18:08
Оценка: 2 (1)
Здравствуйте, verdina, Вы писали:

V>если def файла нет то функция GetProcAddress() не видит функцию из dll-ки

V>есть ли способ обойтись без def файла?

Без def файла функции экспортируются с mangled именами.
Посмотри с пом. depends.exe экспортируемые имена и их используй.
Re: как обойтись без def файла?
От: Vain Россия google.ru
Дата: 06.02.08 18:29
Оценка: 1 (1)
Здравствуйте, verdina, Вы писали:

V>кусок кода из моей программы на MFC

V>если def файла нет то функция GetProcAddress() не видит функцию из dll-ки
V>есть ли способ обойтись без def файла?
Здесь
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]
Re[2]: как обойтись без def файла?
От: izekia  
Дата: 07.02.08 14:50
Оценка:
Здравствуйте, c-smile, Вы писали:

CS>Здравствуйте, verdina, Вы писали:


V>>если def файла нет то функция GetProcAddress() не видит функцию из dll-ки

V>>есть ли способ обойтись без def файла?

CS>Без def файла функции экспортируются с mangled именами.

CS>Посмотри с пом. depends.exe экспортируемые имена и их используй.

декорирование имен — зависит от компилятора, привязываться к ним — это не хорошо
лучше объявить экспортируемые методы как сишные, тогда декорирование не будет использоваться, так как в С нет перегрузки методов
(только кажется билдер будет подчеркивание добавлять)
Re[3]: как обойтись без def файла?
От: c-smile Канада http://terrainformatica.com
Дата: 10.02.08 09:13
Оценка:
Здравствуйте, izekia, Вы писали:

I>декорирование имен — зависит от компилятора, привязываться к ним — это не хорошо

I>лучше объявить экспортируемые методы как сишные, тогда декорирование не будет использоваться, так как в С нет перегрузки методов
I>(только кажется билдер будет подчеркивание добавлять)

А VC++ будет делать следующее: http://msdn2.microsoft.com/en-us/library/x7kb4e2f.aspx
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.