Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Можно ли как-нибудь из DLL получить LIB файл?  (Прочитано 17749 раз)
0 Пользователей и 1 Гость смотрят эту тему.
USBLexus
Опытный

ru
Offline Offline
Пол: Мужской
Кот рыжий


« : 09-07-2004 08:10 » 

Использовал DUMPBIN /EXPORTS 1.DLL Ничего не получается (((
Записан

#define QUESTION(b) (2*b)||(!(2*b)) (c) William Shakespeare
npak
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #1 : 09-07-2004 08:56 » 

USBLexus, этот вопрос уже обсуждался здесь
https://forum.shelek.ru/index.php/topic,3621.0.html
Записан

UniTesK -- индустриальная технология надежного тестирования.

http://www.unitesk.com/ru/
USBLexus
Опытный

ru
Offline Offline
Пол: Мужской
Кот рыжий


« Ответ #2 : 12-07-2004 03:53 » 

Цитата: npak
USBLexus, этот вопрос уже обсуждался здесь
https://forum.shelek.ru/index.php/topic,3621.0.html


Сделал все так как там говорилось

DEF файл:

LIBRARY      "GWDevice.dll"

DESCRIPTION  'GWDevice.dll'

EXPORTS
   GetGWDevParamChar   @1
        GetGWDevParamFloat   @2
        GetGWDevParamLong   @3
        LoadGWDevice   @4
        PrepareForGWDev   @5
        SaveGWDevice   @6
        SetGWDevParamChar   @7
        SetGWDevParamFloat   @8
        SetGWDevParamLong   @9

Сгенерировал LIB подключил его к проекту Написал .h файл:

#define IMPORT __declspec (dllimport)

IMPORT bool PrepareForGWDev   ();
IMPORT bool LoadGWDevice      (char *FN);
IMPORT bool SaveGWDevice      (char *FN);
IMPORT bool GetGWDevParamChar (char *T1, char *T2, char *T3, int p1, int p2, char  *RV);
IMPORT bool SetGWDevParamChar (char *T1, char *T2, char *T3, int p1, int p2, char  *RV);
IMPORT bool GetGWDevParamLong (char *T1, char *T2, char *T3, int p1, int p2, int   *RV);
IMPORT bool SetGWDevParamLong (char *T1, char *T2, char *T3, int p1, int p2, int    RV);
IMPORT bool GetGWDevParamFloat(char *T1, char *T2, char *T3, int p1, int p2, float *RV);
IMPORT bool SetGWDevParamFloat(char *T1, char *T2, char *T3, int p1, int p2, float  RV);

Линкер выдает что:
error LNK2019: unresolved external symbol "__declspec(dllimport) bool __cdecl GetGWDevParamLong(char *,char *,char *,int,int,int *)" (__imp_?GetGWDevParamLong@@YA_NPAD00HHPAH@Z) referenced in function "public: void __thiscall CProgramDlg::LoadParametrsFromConfig(void)" (?LoadParametrsFromConfig@CProgramDlg@@QAEXXZ)

Что делать?
Записан

#define QUESTION(b) (2*b)||(!(2*b)) (c) William Shakespeare
USBLexus
Опытный

ru
Offline Offline
Пол: Мужской
Кот рыжий


« Ответ #3 : 12-07-2004 03:55 » 

Или в DEF надо так записывать?:

_GetGWDevParamChar @1
Записан

#define QUESTION(b) (2*b)||(!(2*b)) (c) William Shakespeare
Chaa
Помогающий

ru
Offline Offline
Пол: Мужской

« Ответ #4 : 12-07-2004 04:31 » 

Нужно
Код:
extern "C"
{
    ...Описания функций...
}
« Последнее редактирование: 29-11-2007 21:44 от Алексей1153++ » Записан
USBLexus
Опытный

ru
Offline Offline
Пол: Мужской
Кот рыжий


« Ответ #5 : 12-07-2004 06:34 » 

Цитата: Chaa
Нужно
Код:
extern "C"
{
    ...Описания функций...
}

А где это нужно?
« Последнее редактирование: 29-11-2007 21:45 от Алексей1153++ » Записан

#define QUESTION(b) (2*b)||(!(2*b)) (c) William Shakespeare
USBLexus
Опытный

ru
Offline Offline
Пол: Мужской
Кот рыжий


« Ответ #6 : 12-07-2004 07:11 » 

Сделал таким образом
extern "C"{
IMPORT bool PrepareForGWDev   ();
IMPORT bool LoadGWDevice      (char *FN);
IMPORT bool SaveGWDevice      (char *FN);
IMPORT bool GetGWDevParamChar (char *T1, char *T2, char *T3, int p1, int p2, char  *RV);
IMPORT bool SetGWDevParamChar (char *T1, char *T2, char *T3, int p1, int p2, char  *RV);
IMPORT bool GetGWDevParamLong (char *T1, char *T2, char *T3, int p1, int p2, int   *RV);
IMPORT bool SetGWDevParamLong (char *T1, char *T2, char *T3, int p1, int p2, int    RV);
IMPORT bool GetGWDevParamFloat(char *T1, char *T2, char *T3, int p1, int p2, float *RV);
IMPORT bool SetGWDevParamFloat(char *T1, char *T2, char *T3, int p1, int p2, float  RV);
}
Линкер не ругается но функция работает неправильно Может это быть из за того, что DLL написана на CBuilder а я пытаюсь ее юзать в Visual C++? Может у них различные форматы передачи данных?
Записан

#define QUESTION(b) (2*b)||(!(2*b)) (c) William Shakespeare
SOS
Гость
« Ответ #7 : 12-07-2004 19:26 » 

На сколько я понемаю в колбасных обрезках,
то пользуйте *.def файло или

foo.h
Код:
extern "C" __declspec( dllexport ) bool foo();

foo.cpp
Код:
extern "C" __declspec( dllexport ) bool foo()
{
   ...
}
Если решился на *.def то

EXPORTS
GetGWDevParamChar @1
GetGWDevParamFloat @2
GetGWDevParamLong @3
@1, ... , @N, а также _  не надо, только имя функции

Код:
EXPORTS 
             GetGWDevParamChar
             GetGWDevParamFloat
             GetGWDevParamLong
« Последнее редактирование: 29-11-2007 21:45 от Алексей1153++ » Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines