Konvertierung eines C++ Programmes nach VB.



  • Hallo Leute,

    ich soll ein Programm nach VB konvertieren. Das Prob: Bei meinem Versuch stürtzt die VB IDE ab. Ich denke es liegt daran das ich die C++ Datentypen nicht richtig in VB abgebildet habe.
    Was sind die grundlegenden Datentypen dieser Funktion:

    HRESULT DispCallFunc(
    void * pvInstance,
    ULONG_PTR oVft,
    CALLCONV cc,
    VARTYPE vtReturn,
    UINT cActuals,
    VARTYPE * prgvt,
    VARIANTARG ** prgpvarg,
    VARIANT * pvargResult);

    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/automat/htm/chap5_6jc3.asp

    Ist das die richtige Interpretation:

    HRESULT DispCallFunc(
    int pvInstance,
    int oVft,
    short cc,
    short vtReturn,
    int cActuals,
    short prgvt,
    long prgpvarg,
    long pvargResult);

    Es geht um die Breite der Datentypen. Zum Beispiel wie breit ist ein Enum...
    Im Internet gibt es Beispiel zur Anwendung dieser Funktion. Die unterscheiden sich jedoch...

    Viele Grüße

    Peter



  • Declare Sub DispCallFunc Lib "oleaut32.dll" ( _
                pvInstance As Any, _
                ByVal oVft As Long, _
                ByVal cc As Integer, _
                ByVal vtReturn As Integer, _
                ByVal cActuals As Long, _
                ByRef prgvt As Integer, _
                ByRef prgpvarg As Variant, _
                ByRef pvargResult As Variant)
    

    sollte dir den Zugriff auf diese API aus VB erlauben.

    Im Internet gibt es Beispiel zur Anwendung dieser Funktion. Die unterscheiden sich jedoch...

    Die Parameter, insbeondere Pointer lassen sie auf mehrere Arten in VB definieren.
    Da man aber in VB mit Zeigern wenig anfangen kann bzw. nur mit Umwegen über CopyMemory u.ä. macht es z.B. selten Sinn
    ein

    void* Bla
    

    als

    Byval Bla As Long
    

    entgegen zu nehmen.
    Daher die Unterschiede.



  • Hallo Illuminator,

    die Definition hast Du aus einen dieser Api Viewer? Die funktionieren aber nicht hundertprozentig, weil sie viele Datentypen einfach nicht richtig auflösen können.
    ZB. ist die Funktion im Original eine Function und keine Sub...

    Viele Grüße

    Peter



  • Ich habe diese Definition aus einem funktionierendem Sourcecode genommen:

    Private Declare Sub DispCallFunc Lib "oleaut32" ( _
        ByVal ppv As Long, _
        ByVal oVft As Long, _
        ByVal cc As Long, _
        ByVal rtTYP As VbVarType, _
        ByVal paCNT As Long, _
        ByVal paTypes As Long, _
        ByVal paValues As Long, _
        ByRef fuReturn As Variant _
    )
    

Anmelden zum Antworten