DLL :(

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
GoGosha
Постоялец
Постоялец
 
Сообщения: 642
Зарегистрирован: 02.08.2002 (Пт) 9:14
Откуда: Russia

DLL :(

Сообщение GoGosha » 30.04.2003 (Ср) 18:36

У маня DLL на С++

DllTest.cpp писал(а):#include <windows.h>
#include <stdio.h>

#define CCONV _stdcall

__int16 CCONV Ret(__int16 value)
{
return value;
}


DllTest.def писал(а):LIBRARY DllTest

EXPORTS
Ret @1


И код на VB

Код: Выделить всё
Private Declare Function Ret Lib "C:\Program Files\Microsoft Visual Studio\MyProjects\DllTest\Debug\DllTest.dll" (Res As Integer) As Integer

Private Sub Form_Load()
    MsgBox Ret(CInt(10))
End Sub


Так вот MsgBox возвращает -1968 это значит, что параметры передаются НЕ ПРАВИЛЬНО. в чем дело и как исправить. :cry: :cry: :cry:

Sebas
Неуловимый Джо
Неуловимый Джо
Аватара пользователя
 
Сообщения: 3626
Зарегистрирован: 12.02.2002 (Вт) 17:25
Откуда: столько наглости такие вопросы задавать

Сообщение Sebas » 01.05.2003 (Чт) 3:31

Может ByVal
- Я никогда не понимал, почему они приходят ко мне чтобы умирать?

sebas<-@->mail.ru

GoGosha
Постоялец
Постоялец
 
Сообщения: 642
Зарегистрирован: 02.08.2002 (Пт) 9:14
Откуда: Russia

Сообщение GoGosha » 01.05.2003 (Чт) 7:33

Sebas писал(а):Может ByVal


СПАСИБО уже сам до этого дошел

GoGosha
Постоялец
Постоялец
 
Сообщения: 642
Зарегистрирован: 02.08.2002 (Пт) 9:14
Откуда: Russia

Сообщение GoGosha » 01.05.2003 (Чт) 8:13

Но всё равно глюки :cry: :cry: :cry: :cry:

Объявление функции:

Код: Выделить всё
int CCONV AlphaDraw(BITMAP *bmpCage, BITMAP *bmpSrc, __int16 x, __int16 y,__int16 cx, __int16 cy, __int16 width, __int16 height, __int16 AlphaProc, BYTE TransR, BYTE TransG, BYTE TransB)
{


CCONV - макрос: Define CCONV _stdcall

на vb она так объявляется:

Код: Выделить всё
Private Declare Function AlphaDraw Lib "Alpha.dll" _
( _
    ByRef bmpCage As BITMAP, _
    ByRef bmpSrc As BITMAP, _
    ByVal x As Integer, _
    ByVal y As Integer, _
    ByVal cx As Integer, _
    ByVal cy As Integer, _
    ByVal width As Integer, _
    ByVal height As Integer, _
    ByVal AlphaProc As Integer, _
    ByVal TransR As Byte, _
    ByVal TransG As Byte)  ', _
    ByVal TransB As Byte _
)


Проблема: первый параметр остаётся ПУСТЫМ, а остальные сдвигаются на один. т.е при вызове
AlphaDraw bmp1, bmp2, 1, 2, 3, 4, 141, 141, 50, 0, 0
bmp1 у меня равно 0
bmp2 = bmp1
x = bmp2
y = x
cx = y
cy=cx
и т.д.
А АОСЛЕДНИЙ ПАРАМЕТР ВООБЩЕ ЛИШНИЙ

Санёк
Бывалый
Бывалый
 
Сообщения: 233
Зарегистрирован: 08.12.2001 (Сб) 19:42
Откуда: Russia

Сообщение Санёк » 04.05.2003 (Вс) 0:34

Добавь as long в конце объявления.

И ещё:
Зачем использовать __int16. Используй short.
Не советую использовать int, он может быть разным на рызных системах


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: AhrefsBot и гости: 83

    TopList