DLL mit excel



  • Hi zusammen,

    binde eine DLL in Excel ein und funktioniert auch alles wunderbar. Nur habe ich Probleme mit einem Char-Pointer:

    DLL Funktion:

    extern "C" __declspec (dllexport) _stdcall int  SM_connect(char *id, int comport){...}
    

    Excelcode:

    Option Explicit
    Private Declare Function SM_connect Lib "c:\cvs_work\C++Builder\Zusatztools\DLL\MeineDLL.dll" (ByVal ID As Variant, ByVal COM As Integer) As Integer
    
    Private Sub CommandButton1_Click()
    MsgBox ("Habe ausgelesen: " & SM_connect("Charpointer", 1))
    End Sub
    

    Die Übergabe mit dem Charpointer geht nicht!
    Kann mir jemand helfen wie ich diese Sache in Excel realisiere?

    Danke



  • Hallo,

    siehe http://support.microsoft.com/kb/187912/en-us

    MfG,

    Probe-Nutzer



  • HI,

    ok, klint einleuchtend, ABER die Funktion der DLL erwartet ja einen CHAR-Pointer.
    Der Artikel sagt mir doch nicht, wie ich einen Excelstring in einen Char-pointer wandle!

    Kannst du mir vielleicht ein kleines Beispiel posten?

    Wäre dir echt dankbar, da ich in Excel überhauot nicht fit bin!!!!!

    Danke



  • ok, klint einleuchtend, ABER die Funktion der DLL erwartet ja einen CHAR-Pointer.
    Der Artikel sagt mir doch nicht, wie ich einen Excelstring in einen Char-pointer wandle!

    Doch, der Artikel beschreibt sogar, dass man nichts umwandeln muss. Dazu sollte ich ergänzen, dass ein LPCSTR bzw. LPSTR, wie dort in den DLL-Funktionen verwendet, nichts anderes als ein char-Zeiger ist. Du solltest also die Funktion anders deklarieren (keine Variants):

    Private Declare Function SM_connect Lib "c:\cvs_work\C++Builder\Zusatztools\DLL\MeineDLL.dll" (ByVal ID As String, ByVal COM As Integer) As Integer
    

    und dann sollte es so einfach sein:

    Private Sub CommandButton1_Click()
      Dim excelString As String
      excelString = "Charpointer"
      MsgBox ("Habe ausgelesen: " & SM_connect(excelString, 1))
    End Sub
    

    MfG,

    Probe-Nutzer



  • Hi ,

    ok, erstmal danke für deine Antwort!

    Jetzt kommt aber

    Laufzeitfehler '49'
    
    Falsche DLL-Aufrufkonvention
    

    Woram kann das liegen?

    Danke und Grüße



  • an den Datentypen (Integer in Long ändern)?

    Private Declare Function SM_connect Lib "c:\cvs_work\C++Builder\Zusatztools\DLL\MeineDLL.dll" (ByVal ID As String, ByVal COM As Long) As Long
    
    Private Sub CommandButton1_Click()
      Dim excelString As String
      [b]Dim com As Long[/b]
      excelString = "Charpointer"
      com = 1
      MsgBox ("Habe ausgelesen: " & SM_connect(excelString, com))
    End Sub
    

    MfG,

    Probe-Nutzer


Anmelden zum Antworten