Использование DLL на С++
От: Cadet  
Дата: 10.12.02 09:47
Оценка:
Имеется DLL написанная на С++. В ней две функции, например void Message() и short Add(short, short). Описаны они таким образом:


extern "C" __declspec(dllexport) void Message()
{
    MessageBox(NULL, "Message", "Title", MB_OK;
}

extern "C" __declspec(dllexport) short Add(short x, short y)
{
    return x+y;
}


Дело вот в чем. Достучаться до первой функции получается без проблем, при попытке обратиться ко второй вылетает сообщение о неправильном формате DLL (функция в Basic описывается соответственно с Integer параметрами, т.к в С++ short занимает 2 байта. Здесь речь идет о VC++ 6.0). Как я понял, ошибка происходит при передаче в DLL параметров по значению. Пробовал передавать ByRef (меняя соответственно short на short*), все то же самое. Объясните плз, в чем дело. Может в DLL описать функции по другому, либо из Basic-а обращаться к ним как-то по особому?
Re: Использование DLL на С++
От: SCS  
Дата: 10.12.02 09:58
Оценка:
Здравствуйте, Cadet, Вы писали:

C>Может в DLL описать функции по другому, либо из Basic-а обращаться к ним как-то по особому?


первая у тебя Sub, а вот вторая — Function, описание функции:
Private Declare Function Add Lib "xxx.dll" (x As Integer, y As Integer) As Integer
SCS
Re: Использование DLL на С++
От: Vi2 Удмуртия http://www.adem.ru
Дата: 10.12.02 10:22
Оценка:
Здравствуйте, Cadet, Вы писали:

C>extern "C" __declspec(dllexport) void __stdcall Message()
C>{
C>    MessageBox(NULL, "Message", "Title", MB_OK;
C>}

C>extern "C" __declspec(dllexport) short __stdcall Add(short x, short y)
C>{
C>    return x+y;
C>}

[]
Теперь нужно достучаться до имени функций. __stdcall превращает имя функции в такой С-манглед вид: _Func@NNN, где NNN — число байт в стеке. Или использовать def-файл при построении твоей dll-ки.
Private Declare Sub твояMessageфункция Lib "твоя.DLL" Alias "_Message@0" ()
Private Declare Function твояAddфункция Lib "твоя.DLL" Alias "_Add@8" (x As Integer, y As Integer) As Integer
Vita
Выше головы не прыгнешь, ниже земли не упадешь, дальше границы не убежишь! © КВН НГУ
Re[2]: Использование DLL на С++
От: Cadet  
Дата: 10.12.02 16:27
Оценка:
Здравствуйте, SCS, Вы писали:

SCS>первая у тебя Sub, а вот вторая — Function, описание функции:

SCS>
SCS>Private Declare Function Add Lib "xxx.dll" (x As Integer, y As Integer) As Integer
SCS>


Да именно так и обращаюсь, а ошибка выскакивает!
Re[3]: Использование DLL на С++
От: SCS  
Дата: 11.12.02 05:36
Оценка:
Здравствуйте, Cadet, Вы писали:
C>Да именно так и обращаюсь, а ошибка выскакивает!
если
Add(short x, short y)

тогда объявление на VB д.б.
Private Declare Function Add Lib "xxx.dll" (ByVal x As Integer, ByVal y As Integer) As Integer

см. также ответ от Vi2 по поводу использования alias'ов
SCS
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.