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
-
-
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