C++ DLL in VB 6.0

Das liegt daran, dass dein definiertes Array zu klein ist.

Guck mal bei dieser Zeile:
Code:
Dim myArray(10) As Long
Da kannst du dann natürlich auch nur 10 Felder ansprechen mit dem C++-Code:
Code:
__declspec(dllexport) long __stdcall getData( long* uebergabeparam );
{
	uebergabeparam[0] = 123;
	uebergabeparam[1] = 456;
	.....
	uebergabeparam[9] = 789;
	// übergebenes Array für weitere Einträge zu klein
}

mfG,
MAN
 
Hi,

ich hatte schon daran gedacht dass es ein ArrayIndexOutofBoundsError sein könnte.

Das ist leider nicht mein Problem, da ich in der C++ Dll die Indizes 0, 1, 2 fülle:

Code:
__declspec(dllexport) long __stdcall uebergabe( long* cArray)
{
cArray[0]  = 1;
cArray[1]  = 2;
cArray[2]  = 3;
return 0;
}

aber in VB ein

Code:
Dim myAarray(10) As Long

habe.
 
Hast du es denn richtig deklariert und benutzt, so wie im folgenden Beispiel?
Code:
Private Declare Function uebergabe Lib "DLL.dll" (ByRef cArrayAs Long)

--------------------------------------------------------------------------------

Dim myArray(10) As Long

uebergabe(myArray(0))

mfG,
MAN
 
Zuerstmal: Danke für Deine Bemühungen. MAN.

Die Deklaration sieht folgendermassen aus:


Code:
Private Declare Function uebergebe Lib "E:\dbs\datdll.dll" Alias "_arrayTest@4" (ByRef Tarray As Long) As Long

und benutzt wird es mit:

Code:
Dim Tarray(10) As Long

uebergebe(Tarray(0))

MsgBox Tarray(0)

Ich kann da keinen Fehler erkennen.
Deshalb frage ich ja auch hier :) :)

Ach ja vor dem Funktionsaufruf zeigt der Debugger:

Tarray: Long(0to10)

und nach uebergebe(Tarray(0))

Tarray : Long(-2147352572 to -2147352573, 10 to 9, 0 to 10)

MfG

HT
 
Sauber....:confused:

Hm... hab' leider keinen blassen Schimmer, was das zu bedeuten hat!

Dann ist das auch mit "Index out of bounds" natürlich klar, wenn der das Array so "zersetzt".

Trotzdem wüßt ich nicht, was daran jetzt so falsch sein sollte, bei ibo hat das ja anscheinend auch ganz gut geklappt, warum dann bei dir nicht... :rolleyes:

Poste mal den kompletten Code der DLL und den Code in VB (oder auch per Mail), vielleicht liegt das Problem an einer ganz anderen Stelle!


mfG,
MAN
 
Zuletzt bearbeitet:
HI,

ok, hier ist der komplette Code

arraydll.cpp:

Code:
extern "C" __declspec(dllexport) long _stdcall uebergebe(long* tArray)
{
	tArray[0] = 1;
	tArray[1] = 2;
	tArray[2] = 3;

	return 0;
}

und der vB Code:

Code:
Option Compare Database
Option Explicit

Private Declare Function uebergebe Lib "E:\ArrayDll\arraydll.dll" Alias "_uebergebe@4" (ByRef tArray As Long) As Long

Sub test()

Dim tArray(10) As Long

uebergebe (tArray(0))

MsgBox (tArray(0))

End Sub

ich hoffe, das hilft Dir weiter.

MfG

HT
 
MAN ich brauch deine hilfe!

im MFC Forum hat mir keiner drauf geantwortet!

Also du kennst dich doch auch in C++ ein bisschen aus ne?

Ich muss aus einer Globalen Funktion eine Combobox von nem dialog füllen....

ich habs mit diesem Code Probiert


BOOL TLGEnumVariablesExCallback(PTLG_VARIABLE_INFO lpvi, LPVOID pUser)
{
CWinCCDataDlg h;

TCHAR szText[256];
sprintf(szText,"%s",lpvi->szVariableName);

CComboBox* c = (CComboBox*) GetDlgItem (h,IDC_COMBO1);
c->InsertString(0,_T(szText));//geht net!

return TRUE;
}


aber es geht nicht!
Da bekomme ich nen laufzeitfehler!
er springt mir ohne auf Return True zu kommen raus und bringt mir nen fehler

Siehst du zufällig was ich falsch mache?

Danke
 
Sieht eigentlich ganz gut aus die Zeile, aber poste doch noch bitte, was bei deiner Funktion die einzelnen Datentypen sind, denn mit PTLG_VARIABLE_INFO und LPVOID kann ich im Moment nichts anfangen. Vielleicht gibt es da bei den String-Konvertierungen Schwierigkeiten. :rolleyes:

Und was kommt denn da für eine Fehlermeldung? Kannst du dich weiter reindebuggen, oder bekommst du da gar keine weiteren Infos raus?

mfG,
MAN
 
PTLG_VARIABLE_INFO ist ein Struct mit zwei member Variablen!
eine Member ist ein Strin und der andere ein float!

Das problem ist, bis zum umkopieren des Strings ist kein fehler
also in szText steht das richtige drin..
bei der Zeile wo ich den Zeiger auf die Combobox deklariere sagt er auch nichts..
nur die zeile mit
c->InsertString(0,szText) und return TRUE wird übersprungen!

Ich habe mal beim debuggen die Variablen alle durchgeschaut!
und das h, also mein Dialog ist immer 0!

Deswegen glaub ich, das das c->InsertString einfach das Dialog nicht findet


die fehlermeldung sieht dann so aus:
Unbehandelte Ausnahme bei 0x10023096 in WinCCData.exe: 0xC0000005: Zugriffsverletzung-Leseposition 0x00000010.

also ich weiß net!
Ich muss es einfach hinkriegen das mein Objekt h nicht mehr null ist! glaub ich! :D
 

Neue Beiträge

Zurück