powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Вызов функции из DLL
45 сообщений из 45, показаны все 2 страниц
Вызов функции из DLL
    #33551383
дед Макар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Помогите. Замучился. BCB6
У меня есть библиотека от стороннего разработчика. Я хочу подключить ее неявно. Сделал
implib bibl.dll bibl.lib
и подключил ее к своему проекту Project->Add to project.
Что мне сделать дальше что бы вызвать функцию bool myFunc(int, AnsiString) из этой dll?
...
Рейтинг: 0 / 0
Вызов функции из DLL
    #33551440
Карабас Барабас
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
дед Макарimplib bibl.dll bibl.lib
и подключил ее к своему проекту Project->Add to project.
Что мне сделать дальше что бы вызвать функцию bool myFunc(int, AnsiString) из этой dll?описать функции соответствующим образом, в справке есть примеры.
поиск по слову dllimport
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Вызов функции из DLL
    #33551457
_Балтика
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
дед МакарПомогите. Замучился. BCB6
У меня есть библиотека от стороннего разработчика. Я хочу подключить ее неявно. Сделал
implib bibl.dll bibl.lib
и подключил ее к своему проекту Project->Add to project.
Что мне сделать дальше что бы вызвать функцию bool myFunc(int, AnsiString) из этой dll? Здесь про классы. Но то же проходит для функций
...
Рейтинг: 0 / 0
Вызов функции из DLL
    #33551497
дед Макар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
пишу
__declspec(dllimport) bool myFunc(int, AnsiString);

и получаю Linker error
Unresolved external 'myFunc(int, AnsiString)' referenced from UNIT1.OBJ

хелп. что не так? Справка почему-то не помогла
...
Рейтинг: 0 / 0
Вызов функции из DLL
    #33551513
Карабас Барабас
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
может надо extern "C" ?
ты посмотри, как в ДЛЛ функции называются, там всякие префиксы могут быть ...
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Вызов функции из DLL
    #33551524
_Балтика
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть такая примочка bindump.exe называется. Ее поюзай с dll.
...
Рейтинг: 0 / 0
Вызов функции из DLL
    #33551532
дед Макар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
читаю из http://www.codenet.ru/progr/visualc/Using-DLL.php
==========================
Приведем теперь исходный код простого приложения, которое использует функцию MyFunction из библиотеки MyDLL.dll:
#include <windows.h>
#include "MyDLL.h"

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow)
{
int iCode=MyFunction("Hello");
return 0;
}
===========================

у себя пишу

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
#include "bibl.h"  // шло вместе с библиотекой
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
 bool a = myFunc( 5 , "asdf");
}

получаю
[Linker Error] Unresolved external '_myFunc' referenced from D:\CVSHOME\TEST\UNIT1.OBJ
...
Рейтинг: 0 / 0
Вызов функции из DLL
    #33551539
дед Макар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
_БалтикаЕсть такая примочка bindump.exe называется. Ее поюзай с dll.

нету в билдере такого :(
...
Рейтинг: 0 / 0
Вызов функции из DLL
    #33551553
дед Макар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Карабас Барабасможет надо extern "C" ?
ты посмотри, как в ДЛЛ функции называются, там всякие префиксы могут быть ...
Posted via ActualForum NNTP Server 1.3

extern "C" где? у меня? А куда его запихнуть? Функция так и называется. Она и в хидере так описана, и в описании длл-ки..
...
Рейтинг: 0 / 0
Вызов функции из DLL
    #33551587
_Балтика
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Карабас имел ввиду __declspec(dllimport) extern "C" bool myFunc(int, AnsiString);
В библиотеках вместо действительных иногда используются так называемые декоративные имена. Что-то типа _MyFyncUSXYZ
...
Рейтинг: 0 / 0
Вызов функции из DLL
    #33551612
дед Макар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
_БалтикаКарабас имел ввиду __declspec(dllimport) extern "C" bool myFunc(int, AnsiString);


[C++ Error] Unit1.cpp(14): E2040 Declaration terminated incorrectly
...
Рейтинг: 0 / 0
Вызов функции из DLL
    #33551639
_Балтика
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
дед Макар _БалтикаКарабас имел ввиду __declspec(dllimport) extern "C" bool myFunc(int, AnsiString);


[C++ Error] Unit1.cpp(14): E2040 Declaration terminated incorrectly
Извиняюсь, наоборот:
extern "C" __declspec(dllimport) bool myFunc(int, AnsiString);
...
Рейтинг: 0 / 0
Вызов функции из DLL
    #33551646
Карабас Барабас
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вот пример:
extern "C" char* __declspec(dllexport) DateStr(int *Hours);

в твоем случае будет (скорее всего) что-то типа:
extern "C" char* __declspec(dllimport) DateStr(int *Hours);

в некоторых случаях к имени функции компилятором добавляются префиксы, обозначающие типы входных параметров, тип вызова ну и т.п.
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Вызов функции из DLL
    #33551665
_Балтика
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Карабас Барабасвот пример:
extern "C" char* __declspec(dllexport) DateStr(int *Hours);

в твоем случае будет (скорее всего) что-то типа:
extern "C" char* __declspec(dllimport) DateStr(int *Hours);

в некоторых случаях к имени функции компилятором добавляются префиксы, обозначающие типы входных параметров, тип вызова ну и т.п.
Posted via ActualForum NNTP Server 1.3Возвращаемый тип все-таки после __declspec(dllimport) писать надо.
...
Рейтинг: 0 / 0
Вызов функции из DLL
    #33551674
Карабас Барабас
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_БалтикаВозвращаемый тип все-таки после __declspec(dllimport) писать надо.да ? может быть :)) компилируется и ладно :)
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Вызов функции из DLL
    #33551680
дед Макар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
_Балтика дед Макар _БалтикаКарабас имел ввиду __declspec(dllimport) extern "C" bool myFunc(int, AnsiString);


[C++ Error] Unit1.cpp(14): E2040 Declaration terminated incorrectly
Извиняюсь, наоборот:
extern "C" __declspec(dllimport) bool myFunc(int, AnsiString);

Если с подключенным ихним хидером, то
[C++ Error] Unit1.cpp(18): E2337 Only one of a set of overloaded functions can be "C"

если без него то Unresolved...
...
Рейтинг: 0 / 0
Вызов функции из DLL
    #33551704
Карабас Барабас
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
дед МакарЕсли с подключенным ихним хидером,дак есть их хедер ? тогда ничего мутить не надо, просто надо его подключать, там всё должно быть описано как надо
дед Макар[C++ Error] Unit1.cpp(18): E2337 Only one of a set of overloaded functions can be "C"а если ткнуть на ошибку и нажать F1, что написано ? (я не встречался с такой ошибкой)
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Вызов функции из DLL
    #33551707
_Балтика
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Должна быть все таки какая-то утилита типа dumpbin.exe и в Борланде.
Если нет, то можно поэксперементировать с LoadLibrary и GetProcAddress что бы докопаться до имени ф-ции.
...
Рейтинг: 0 / 0
Вызов функции из DLL
    #33551726
_Балтика
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как она в хедере описана?
...
Рейтинг: 0 / 0
Вызов функции из DLL
    #33551733
_Балтика
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Объявлена вернее :))
...
Рейтинг: 0 / 0
Вызов функции из DLL
    #33551746
Карабас Барабас
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Балтикаdumpbin.exeА что она делает ? Если показывает список экспортируемых функций, то такого добра в инете навалом, думаю, если автор поищет то найдет или ее же, или другую аналогичную
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Вызов функции из DLL
    #33551759
_Балтика
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Карабас Барабас _Балтикаdumpbin.exeА что она делает ? Если показывает список экспортируемых функций, то такого добра в инете навалом, думаю, если автор поищет то найдет или ее же, или другую аналогичную
Posted via ActualForum NNTP Server 1.3Дык и я про тоже. А она много всего делает, в зависимости от ключей.
...
Рейтинг: 0 / 0
Вызов функции из DLL
    #33551783
Карабас Барабас
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Балтикаdumpbin.exeкстати, уточни, про какой именно файл ты говришь: bindump.exe или dumpbin.exe ? гугль по обеим ссылки выдает :))
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Вызов функции из DLL
    #33551801
_Балтика
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Карабас Барабас _Балтикаdumpbin.exeкстати, уточни, про какой именно файл ты говришь: bindump.exe или dumpbin.exe ? гугль по обеим ссылки выдает :))
Posted via ActualForum NNTP Server 1.3dumpbin.exe
...
Рейтинг: 0 / 0
Вызов функции из DLL
    #33551814
_Балтика
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
_Балтика Карабас Барабас _Балтикаdumpbin.exeкстати, уточни, про какой именно файл ты говришь: bindump.exe или dumpbin.exe ? гугль по обеим ссылки выдает :))
Posted via ActualForum NNTP Server 1.3dumpbin.exeНо он без link.exe и еще какой-то dll (по-моему mspdb71.dll) работать не будет.
...
Рейтинг: 0 / 0
Вызов функции из DLL
    #33551842
дед Макар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
_БалтикаДолжна быть все таки какая-то утилита типа dumpbin.exe и в Борланде.
Если нет, то можно поэксперементировать с LoadLibrary и GetProcAddress что бы докопаться до имени ф-ции.

Через GetProcAddress я ее достаю :)
А хочется неявно....
...
Рейтинг: 0 / 0
Вызов функции из DLL
    #33551847
Карабас Барабас
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
дед МакарА хочется неявно....забей, раз хедер неподходит :)

ну можно еще повертеть опции компилятора ...
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Вызов функции из DLL
    #33551852
_Балтика
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мона все-таки обяву ф-ции в студию?
...
Рейтинг: 0 / 0
Вызов функции из DLL
    #33551907
дед Макар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
_БалтикаМона все-таки обяву ф-ции в студию?

BASS_Init - это то что я называл myFunc :)

#define BASSDEF(f) (WINAPI *f) // define the functions as pointers

#ifdef WIN32
BOOL BASSDEF(BASS_Init)(int device, DWORD freq, DWORD flags, HWND win, const GUID *dsguid);
#else
BOOL BASSDEF(BASS_Init)(int device, DWORD freq, DWORD flags, void *win, void *dsguid);
#endif
...
Рейтинг: 0 / 0
Вызов функции из DLL
    #33551923
Карабас Барабас
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что нам скажут твои BASSDEF ??? приведи описание
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Вызов функции из DLL
    #33551938
дед Макар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Карабас БарабасЧто нам скажут твои BASSDEF ??? приведи описание
Posted via ActualForum NNTP Server 1.3

ну как же, я же написал выше:
#define BASSDEF(f) (WINAPI *f) // define the functions as pointers
...
Рейтинг: 0 / 0
Вызов функции из DLL
    #33551947
Карабас Барабас
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
дед Макар#define BASSDEF(f) (WINAPI *f) // define the functions as pointersтьфу :)) куда я смотрел ?:))
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Вызов функции из DLL
    #33551984
дед Макар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В общем ситуация такая. Еслия делаю явно то у меня все работает

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
//cpp
void __fastcall TForm1::Button1Click(TObject *Sender)
{

HINSTANCE bass=LoadLibrary("BASS.DLL"); // load BASS
//BASS_Init=GetProcAddress(bass,"BASS_Init"); // get BASS_Init
*((void**)&BASS_Init)=GetProcAddress(bass,"BASS_Init");
//BASS_Init(-1,44100,0,hWnd,NULL); // call BASS_Init

}
//---------------------------------------------------------------------------

//h
#define BASSDEF(f) (WINAPI *f) // define the functions as pointers
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published:	// IDE-managed Components
    TButton *Button1;
    void __fastcall Button1Click(TObject *Sender);
private:	// User declarations
public:		// User declarations
    __fastcall TForm1(TComponent* Owner);

    BOOL BASSDEF(BASS_Init)(int device, DWORD freq, DWORD flags, HWND win, const GUID *dsguid);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif

Как мне это все провернуть неявно?
...
Рейтинг: 0 / 0
Вызов функции из DLL
    #33552108
_Балтика
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
То есть так значит:
Код: plaintext
1.
BOOL (WINAPI *BASS_Init)(int device, DWORD freq, DWORD flags, HWND win, const GUID *dsguid);
WINAPI не забываешь? Или у тебя по умолчанию __stdcall?
...
Рейтинг: 0 / 0
Вызов функции из DLL
    #33552173
дед Макар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
_БалтикаТо есть так значит:
Код: plaintext
1.
BOOL (WINAPI *BASS_Init)(int device, DWORD freq, DWORD flags, HWND win, const GUID *dsguid);
WINAPI не забываешь? Или у тебя по умолчанию __stdcall?

опять? :) Я ж писал выше в тексте

#define BASSDEF(f) (WINAPI *f)
...
Рейтинг: 0 / 0
Вызов функции из DLL
    #33552253
_Балтика
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
дед Макар
опять? :) Я ж писал выше в тексте

#define BASSDEF(f) (WINAPI *f)
Я имел ввиду при импорте
__declspec(dllimport) BOOL WINAPI ...
...
Рейтинг: 0 / 0
Вызов функции из DLL
    #33552272
дед Макар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
_Балтика дед Макар
опять? :) Я ж писал выше в тексте

#define BASSDEF(f) (WINAPI *f)
Я имел ввиду при импорте
__declspec(dllimport) BOOL WINAPI ...

А... когда неявно пытаюсь? Конечно же есть. и получаю unresolved...
...
Рейтинг: 0 / 0
Вызов функции из DLL
    #33552287
Карабас Барабас
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если хедер не подходит, обратись к разработчикам
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Вызов функции из DLL
    #33552319
дед Макар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
если я загружаю ее явно - то он очень даже подходит....
Или есть какие-то нюансы при создании dll для подключения ее явно/неявно?
...
Рейтинг: 0 / 0
Вызов функции из DLL
    #33552324
Карабас Барабас
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это 100% говорит о том, что компилятор подставляет в имена функций свои служебные символы. Покрути настройки компилятора
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Вызов функции из DLL
    #33553407
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
сделай вот так:
Код: plaintext
1.
2.
3.
4.
5.
6.
#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
extern "C" {
#include "bibl.h"  // шло вместе с библиотекой
}
...
Рейтинг: 0 / 0
Вызов функции из DLL
    #33554075
дед Макар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
White Owlсделай вот так:
Код: plaintext
1.
2.
3.
4.
5.
6.
#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
extern "C" {
#include "bibl.h"  // шло вместе с библиотекой
}


Unresolved external.....
Может я че не так делаю изначально? Может кто нибудь объяснить по шагам этапы неявного подключения сторонней библиотеки(начиная с "запустить билдер" и заканчивая "нажать F9") ?
...
Рейтинг: 0 / 0
Вызов функции из DLL
    #33559341
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1) возьми любую утилиту показывающую имена экспортируемых функций. Например depends.exe из состава VC или соотвествующий плагин к Фару. Посмотри как выглядят имена экспортируемых функций. Или даже impdef который есть и в BC, но с ним сложнее, надо уметь читать def файлы тогда :)
2) Если имена выглядит как "SomeFunction" то используй implib /a my.lib my.dll Если "_SomeFunction", то implib my.lib my.dll
3) В заголовочном файле должно быть описание функции такого вида:
int SomeFunction(int x, int y, char *s);
этого хватает! При большом желании можно добавлять всяческие extern или __declspec(dllimport), но на самом деле они для BC не нужны.
4) В списке линковки указываешь my.lib как обычную библиотеку и все.
5) Если пишешь на С++, то не забудь имена импортируемых функций в заголовке указать как С. Для этого, либо каждую функцию помечаешь как extern "C" (синтаксис тебе уже показывали), либо все функции разом:
Код: plaintext
1.
2.
3.
4.
extern "C" {
  int DllFunc1(int x, int y);
  char *DllFunc2(char *s);
  // и так далее
}

Никаких def файлов тебе не нужно, никаких declspec(dllimport) тоже.
...
Рейтинг: 0 / 0
Вызов функции из DLL
    #33560766
учусь
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А можно привести алгоритм для VC++.
...
Рейтинг: 0 / 0
Вызов функции из DLL
    #33561613
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
можно, но лениво :)
Ищи, здесь на форуме описывалось неоднократно.
Вот, в качестве рабочего примера, делал когда-то... как использовать dll из BC в VC
...
Рейтинг: 0 / 0
45 сообщений из 45, показаны все 2 страниц
Форумы / C++ [игнор отключен] [закрыт для гостей] / Вызов функции из DLL
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]