Toon posts:

[C++/VB] C++ dll gebruiken in VB *

Pagina: 1
Acties:

Verwijderd

Topicstarter
Momenteel ben ik in het bezit van een api die een bepaalde server kan aansturen.

Deze api (dll) is geschreven in (hoogstwaarschijnlijk) c++

de cc2k_dll.dll call naar CC_CONNECT() in de c2k_dll.h (deze is meegeleverd bij het pakke) is :

code:
1
2
3
4
5
6
7
8
9
10
11
DLL_EXP void __stdcall CC_CONNECT(
    int  As_id,
    int  At_id,
    char *AUser,
    char *APassword,
    char *AHost,
    char *AService,
    int  ATCP,
    int  AUDP,
    int  AReserved
);


De functie wil ik graag gebruiken in een VB OCX

Echter, wanneer ik deze probeer aan te roepen met de volgende code:

code:
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
Option Explicit

Private Declare Function CC_CONNECT _
Lib "c:\Api\cc2k_dll.dll" ( _
    ByVal As_id As Long, _
    ByVal At_id As Long, _
    ByRef AUser() As Byte, _
    ByRef APassword() As Byte, _
    ByRef AHost() As Byte, _
    ByRef AService() As Byte, _
    ByVal ATCP As Long, _
    ByVal AUDP As Long, _
    ByVal AReserved As Long _
)

----------------------------------------------------
Dim AUser() As Byte
Dim APassword() As Byte
Dim AHost() As Byte
Dim AService() As Byte

AUser = "user"
APassword = "pass"
AHost = "server"
AService = "Name of Service"

'// Call CC_CONNECT
    
    CC_CONNECT 0, 400, AUser, APassword, AHost, AService, 8777, 0, 0


dan krijg ik als foutmelding "Bad dll convention".

Dit zou betekenen dat de dll niet gecompileer is met stdcall of fastcall.

Het vreemde is, dat wanneer je kijkt naar de c++ call, deze ook als stdcall wordt geclassificeerd.

Kan iemand misschien een andere fout ontdekken?

  • EfBe
  • Registratie: Januari 2000
  • Niet online
Die DLL_EXP macro, is die ook gedefined in je .h file? Om een dll in VB te kunnen gebruiken heb je C exports nodig. C++ compilers 'manglen' namen van exported functies volgens een bepaald algorithme (per compiler verschillend). Als je VC++ hebt, kun je dan dumpbin /export thedll.dll doen op een command prompt? Je moet dan leesbare namen zien en niet namen met allerlei garbage.

Creator of: LLBLGen Pro | Camera mods for games
Photography portfolio: https://fransbouma.com


Verwijderd

Topicstarter
Dank je voor je reactie.

Ik had zoiets al ingedachte namelijk.

Helaas heb ik momenteel niet dumpbin in me bezit (vc++ ligt op me werk)

Denk je dat je het zou kunnen doen voor me als ik je de api stuur?

Verwijderd

Topicstarter
Volgens PE Explorer is de naam van CC_CONNECT

_CC_CONNECT

Maar _CC_CONNECT is geen valid naam in VB.

Wat nu?

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 00:13

.oisyn

Moderator Devschuur®

Demotivational Speaker

Verwijderd schreef op 21 april 2004 @ 18:06:
Denk je dat je het zou kunnen doen voor me als ik je de api stuur?
Misschien heb je mazzel en wil EfBe dat wel (hoewel ik dat betwijfel overigens ;)), maar daar is GoT niet voor bedoelt. P&W is bedoeld voor mensen die zelf programmeren en dus ook zelf hun problemen oplossen

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Verwijderd

Topicstarter
Jaja. Dat begrijp ik allemaal wel.

Het was gewoon een verzoekje zodat ik niet al die 20 cds weer moet zoeken

.edit1:
Ik heb het al voor elkaar gekregen :)

Eigenlijk schiet ik er niets mee op.

Dit zijn de export namen (+ nog wat andere meuk die er niet bij zitten)

code:
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
48  135 0000D3D4 CC_ARTICLERANGE
         45  136 0000D378 CC_CONNECT
         59  137 0000D520 CC_DECODE_AUXFRAME
         57  138 0000D4E0 CC_DECODE_HEADER
         52  139 0000D44C CC_DEL_ARTICLE
         46  13A 0000D3B4 CC_DISCONNECT
         69  13B 0000D638 CC_DISKFREE
         68  13C 0000D61C CC_DISKSIZE
         75  13D 0000D7E0 CC_ENABLE_EVENTS
         44  13E 0000D32C CC_EVENT
         80  13F 0000D890 CC_EXTENDED_CALL
         49  140 0000D3EC CC_GET_ARTICLEHEADER
         50  141 0000D408 CC_GET_ARTICLEHEADERS
         67  142 0000D604 CC_GET_DATETIME
         60  143 0000D544 CC_HEADER_GET_ITEM
         61  144 0000D564 CC_HEADER_SET_ITEM
         89  145 0000DAD4 CC_MM_CODECVERSION
         82  146 0000D8D0 CC_MM_CREATE_CODER
         84  147 0000DA38 CC_MM_DECODE_SSP
         83  148 0000D9CC CC_MM_DESTROY_CODER
         88  149 0000DABC CC_MM_ENCODE_DONE
         86  14A 0000DA80 CC_MM_ENCODE_EXEC
         85  14B 0000DA5C CC_MM_ENCODE_INIT
         87  14C 0000DA9C CC_MM_ENCODE_STATUS
         81  14D 0000D8AC CC_MM_SET_ENV
         51  14E 0000D428 CC_MOD_ARTICLEHEADER
         78  14F 0000D838 CC_NEAREST_ARTICLE_ON_ARTICLE
         79  150 0000D854 CC_NEAREST_ARTICLE_ON_DATETIME
         66  151 0000D5EC CC_PING
         47  152 0000D3CC CC_POLL
         70  153 0000D654 CC_PQL_SUBMIT
         77  154 0000D820 CC_REBUILD_DATABASE
         71  155 0000D670 CC_SEND_CMD
         76  156 0000D800 CC_SEND_HW_EVENTS
         72  157 0000D694 CC_SEND_PRM
         73  158 0000D6B8 CC_SIM_EVENT
         74  159 0000D740 CC_SIM_XEVENT
         65  15A 0000D5D4 CC_STREAM_CLOSE
         62  15B 0000D584 CC_STREAM_INIT
         63  15C 0000D5A0 CC_STREAM_START
         64  15D 0000D5BC CC_STREAM_STOP
         58  15E 0000D500 CC_UPDATE_HEADER
         55  15F 0000D4A8 CC_XFER
         53  160 0000D46C CC_XFER_DOWNLOAD
         56  161 0000D4C8 CC_XFER_END
         54  162 0000D48C CC_XFER_UPLOAD
         11  163 0000CE4C _CC_ARTICLERANGE
          8  164 0000CDF4 _CC_CONNECT
         22  165 0000CF7C _CC_DECODE_AUXFRAME
         20  166 0000CF44 _CC_DECODE_HEADER
         15  167 0000CEBC _CC_DEL_ARTICLE
          9  168 0000CE2C _CC_DISCONNECT
         32  169 0000D074 _CC_DISKFREE
         31  16A 0000D06C _CC_DISKSIZE
         38  16B 0000D1FC _CC_ENABLE_EVENTS
          7  16C 0000CDAC _CC_EVENT
         12  16D 0000CE64 _CC_GET_ARTICLEHEADER
         13  16E 0000CE80 _CC_GET_ARTICLEHEADERS
         30  16F 0000D054 _CC_GET_DATETIME
         23  170 0000CF9C _CC_HEADER_GET_ITEM
         24  171 0000CFB8 _CC_HEADER_SET_ITEM
         14  172 0000CE9C _CC_MOD_ARTICLEHEADER
         29  173 0000D03C _CC_PING
         10  174 0000CE44 _CC_POLL
         33  175 0000D07C _CC_PQL_SUBMIT
         34  176 0000D098 _CC_SEND_CMD
         39  177 0000D218 _CC_SEND_HW_EVENTS
         35  178 0000D0B8 _CC_SEND_PRM
         36  179 0000D0D8 _CC_SIM_EVENT
         37  17A 0000D15C _CC_SIM_XEVENT
         28  17B 0000D024 _CC_STREAM_CLOSE
         25  17C 0000CFD4 _CC_STREAM_INIT
         26  17D 0000CFF0 _CC_STREAM_START
         27  17E 0000D00C _CC_STREAM_STOP
         21  17F 0000CF60 _CC_UPDATE_HEADER
         18  180 0000CF10 _CC_XFER
         16  181 0000CED8 _CC_XFER_DOWNLOAD
         19  182 0000CF2C _CC_XFER_END
         17  183 0000CEF4 _CC_XFER_UPLOAD


iemand anders enig idee?

.edit2:
De dll is trouwens gemaakt in Delphi

.edit3:
An .EXE file created in Visual Basic will allow you to call a DLL function that has been declared with the _cdecl calling convention without an error. It is only when you try to call such a function when running a program from the Visual Basic IDE, that Visual Basic generates the following error:


Schijnt een bug te zijn!

Dank allen voor uw hulp!

.modbreak: gebruik de editknop om je bericht te editten ipv nieuwe reacties te plaatsen zodat je topic bovenaan de lijst blijft (wat in de volksmond "kicken" wordt genoemd ;))

[ Voor 96% gewijzigd door .oisyn op 21-04-2004 20:36 ]


  • farlane
  • Registratie: Maart 2000
  • Laatst online: 22-05 16:53
Verwijderd schreef op 21 april 2004 @ 18:36:
Volgens PE Explorer is de naam van CC_CONNECT

_CC_CONNECT

Maar _CC_CONNECT is geen valid naam in VB.

Wat nu?
Visual Basic:
1
Public Declare "Blaat" Alias "_Blaat" lib ......

[ Voor 8% gewijzigd door farlane op 21-04-2004 23:04 ]

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.

Pagina: 1