VC++ 6 Aufruf in VB6

Mel_One

Erfahrenes Mitglied
Hallo, ich versuche gerade, eine VC++ 6-Funktion in VB6 aufzurufen.
Dabei sieht die VC++-Funktion, an die ich ran will, so aus:
Code:
size_t _stdcall iconv (iconv_t icd,
              ICONV_CONST char* * inbuf, size_t *inbytesleft,
              char* * outbuf, size_t *outbytesleft)
{
  conv_t cd = (conv_t) icd;
  if (inbuf == NULL || *inbuf == NULL)
    return cd->lfuncs.loop_reset(icd,outbuf,outbytesleft);
  else
    return cd->lfuncs.loop_convert(icd,
                                   (const char* *)inbuf,inbytesleft,
                                   outbuf,outbytesleft);
}
Da ich schon vernommen hab, dass die char* * ein Problem sind, hab ich darum nun noch eine Funktion gebastelt:
Code:
size_t _stdcall iconv_aufruf(iconv_t cd,LPSTR into, size_t *intoSize,LPSTR out, size_t *outSize)
{
	size_t returnValue = iconv(cd,&into,intoSize,&out,outSize);
	return returnValue;
}
Dies ist auch in eine passende Headerdatei so eingefügt worden:
Code:
extern LIBICONV_DLL_EXPORTED size_t _stdcall iconv (iconv_t cd, const char* * inbuf, size_t *inbytesleft, char* * outbuf, size_t *outbytesleft);
Dabei scheint size_t ein typedef für Integer zu sein und size_t ist definitiv ein Typedef auf unsigned int.
Das versuche ich nun, innerhalb von VB6 zu verwenden:
Code:
Option Explicit

Private Declare Function iconv_open Lib "C:\libiconv-1.9.2-src\src\iconv.dll" Alias "_libiconv_open@8" (ByVal tocode As String, ByVal fromcode As String) As Integer
Private Declare Function iconv Lib "C:\libiconv-1.9.2-src\src\iconv.dll" Alias "#2" (ByVal cd As Integer, ByVal inbuf As String, ByVal inbytesleft As Long, ByVal outbuf As String, ByVal outbytesleft As Long) As Long
Private Sub Form_Load()
    Dim a As Integer
    Dim testString As String
    Dim testString2 As String
    Dim laengeA As Long
    Dim laengeB As Long
    Dim ergebnis As Long
    testString = "Hallo"
    testString2 = ""
    laengeA = Len(testString)
    testString2 = Space$(laengeA)
    a = iconv_open("UTF-16", "LATIN1")
    ergebnis = iconv(a, testString, laengeA, testString2, Conversion.CLng(0))
    testString = Trim$(testString)
    testString2 = Trim$(testString2)
End Sub
Tja, beim Ausführen von dem guten Stück schmiert mir Visual Studio sang- und klanglos einfach weg. Kann mir da zufällig jemand bei helfen? Bin für jede Hilfe dankbar.
Greetings.
 
Soweit ich das weiss ist bstr der günstigste Datentyp für den Austausch zwischen vb und c++ wenn es um strings geht

Grüsse bb
 
Okay, ich habs hinbekommen.
Code:
Option Explicit

Private Declare Function iconv Lib "C:\libiconv-1.9.2-src\src\iconv.dll" Alias "_iconv_aufruf@24" (ByVal tocode As String, ByVal fromcode As String, inbuf As Byte, inbytesleft As Integer, outbuf As Byte, ByVal outbytesleft As Integer) As Integer
Private Sub Form_Load()
    Dim a As Integer
    Dim testString As String
    Dim testString2 As String
    Dim laengeA As Integer
    Dim laengeB As Integer
    Dim ergebnis As Integer
    Dim into() As Byte
    Dim out() As Byte
    testString = "DUMDIDUMDIDU"
    laengeA = Len(testString)
    laengeB = 0
    
    into = StrConv(testString, vbFromUnicode)
    ReDim out(0 To UBound(into))
    laengeA = UBound(into)
    

'   VBSimpleEncrypt = StrConv(aDest, vbUnicode)

    
    
'    a = iconv_open("UTF-16", "LATIN1")
    ergebnis = iconv("LATIN2", "LATIN1", into(0), laengeA, out(0), Conversion.CLng(0))
    testString2 = StrConv(out, vbUnicode)
    MsgBox (testString2)
End Sub
auf der Visual Basic-Seite und
Code:
int _stdcall iconv_aufruf(const char* tocode, const char* fromcode, char* into, int *intoSize,char* out, int *outSize)
{
	iconv_t cd = iconv_open(tocode,fromcode);
	//char *test=fromcode;
	size_t valueIntoSize = (unsigned int)intoSize;
	size_t valueOutputSize = (unsigned int)outSize;
	unsigned int i;
	//for(i=0;i<valueIntoSize;i++)
	//out[0]=(char)valueIntoSize;
	//strcpy(*out,into);
	out[0]=(char)intoSize;
	/*size_t returnValue = iconv(cd,&into,&valueIntoSize,&out,&valueOutputSize);*/
	iconv_close(cd);
	/*int status = iconv_close(cd);*/
	return 0;
	/*i=23;
	return 0;*/

}
auf der C-Seite. Jetzt hab ich lediglich Probleme mit dem Datentyp "size_t", das ist ein Typedef für Unsigned int. Aber dat krieg ich scho irgendwie hin.
 
Zurück