Übergabe einer Struktur (ByRef) aus VB

stevieda

Grünschnabel
Hallo zusammen,

ich benötige Hilfe bei folgendem Problem:

Eine VB-Applikation (Visual Basic 8 bzw. 2005) übergibt Werte an eine Funktion einer C++ - DLL. Unter anderem ist da auch ein Array mit Strukturen dabei. Ich komme nicht weiter, denn ich weiß nicht, wie ich das Array mit den Strukturen in C++ aufnehme und weiterverarbeite.

Mein VB-Code sieht folgendermaßen aus:

Code:
Public Declare Function mytest Lib "CleanSTL.dll" (ByVal mystring As String, ByRef punkteliste As T3DVECF, _
                                 ByRef dreiecksliste As T3DVECF, ByRef n As Long, ByRef m As Long) As Long

Public Type T3DVECF
    x As Single
    y As Single
    z As Single
End Type

Public Type TRIANGLE
    i As Long
    j As Long
    k As Long
End Type

Private punkteliste(1) As T3DVECF
Private dreiecksliste(1) As TRIANGLE

Sub main()

    Dim pathname As String
    Dim n As Long
    Dim m As Long
    Dim status As Boolean
    
    pathname = "C:\MeineDLLs\CleanSTL.dll"
    
    punkteliste(0).x = 24
    punkteliste(0).y = 12
    punkteliste(0).z = 5
    
    punkteliste(1).x = 24
    punkteliste(1).y = 12
    punkteliste(1).z = 5
    
    dreiecksliste(0).i = 1
    dreiecksliste(0).j = 2
    dreiecksliste(0).k = 3
    
    dreiecksliste(1).i = 2
    dreiecksliste(1).j = 6
    dreiecksliste(1).k = 8
    
    n = 24
    m = 30
    
    status = mytest(pathname, punkteliste, dreiecksliste, n, m)
    
    Debug.Print "" & punkteliste(1).x

End Sub

Der C++-Code sieht so aus:


Code:
#include "stdafx.h"

typedef   signed    long  int32;   // 32 Bit  mit Vorzeichen

BOOL APIENTRY DllMain( HMODULE hModule,
                       DWORD  ul_reason_for_call,
                       LPVOID lpReserved
					 )
{
    return TRUE;
}

struct T3DVECF 
{
public:
  float x;
  float y;
  float z;
} *punkteliste[1];

struct TRIANGLE 
{
public:
  int32 i;
  int32 j;
  int32 k;
} *dreiecksliste[1];

long _stdcall mytest(char *mystring, struct T3DVECF *punkteliste[1], struct TRIANGLE *dreiecksliste[1], int32 *n, int32 *m)
{
	bool status;

	(*punkteliste)[0].x += 1;
	(*punkteliste)[0].y += 1;
	(*punkteliste)[0].z += 1;

	*n += 2;
	*m += 2;

	status=true;
	return status;
}

Also ich bin wirklich für jede Form der Hilfe oder Anregung dankbar.
 
Zuletzt bearbeitet:
Hi.

Ich würde es so versuchen:
C:
struct T3DVECF 
{
  float x;
  float y;
  float z;
};

struct TRIANGLE 
{
  int32 i;
  int32 j;
  int32 k;
};

long _stdcall mytest(char *mystring, struct T3DVECF *punkteliste, struct TRIANGLE *dreiecksliste, int32 *n, int32 *m)
{
	punkteliste[0].x += 1;
	punkteliste[0].y += 1;
	punkteliste[0].z += 1;

	*n += 2;
	*m += 2;

	return true;
}
Gruß
 
Zurück