WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Char array Speicherlayout

 

TinTin82
Forum-Anfänger

Forum-Anfänger


Beiträge: 15
Anmeldedatum: 07.05.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.09.2017, 16:49     Titel: Char array Speicherlayout
  Antworten mit Zitat      
Hi,

ich versuche gerade ein Character array von Matlab an ein COM objekt zu übergeben.
Meine C Schnittstelle:
Code:

STDMETHOD_(uint32_t,TcpIpOpen)(uint8_t IpAddress[],uint32_t Port) PURE;
 

Automation TypeLib parameter Beschreibung:
Code:

        TYPEDESC tdescParams = { 0 };
        tdescParams.vt = VT_UI1;

        ELEMDESC myParams[2] = { 0 };
        myParams[0].tdesc.vt = VT_PTR;                // IpAddress
        myParams[0].tdesc.lptdesc = &tdescParams;
        myParams[1].tdesc.vt = VT_UI4;                // Port
 


Wenn ich nun in Matlab versuche die Funktion auszuführen, dann schaut es so aus als würde Matlab jeden einzelnen Buchstaben mit '\0' terminieren ???

Code:

h1 = actxserver('CoClassDll.CoClass2');
h1.TcpIpOpen('227.0.0.10000000000',1324)
 


Wenn ich in der C-Funktion "TcpIpOpen" den ersten Parameter byteweise als uint8 interpretiere bekomme ich:
[50 0 50 0 55 0 46 .... ]
was in ascci
2 \0 2 \0 7 \0 . ....
entspricht.

Gibt es eine Möglichkeit das so zu ändern, dass matlab einen ganz normalen 0 terminierten C String an das C COM objekt übergibt ohne hinter jedem Buchstaben eine 0 Terminierung zuhaben ??

Gruß,
TinTin
Private Nachricht senden Benutzer-Profile anzeigen


TinTin82
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 15
Anmeldedatum: 07.05.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.09.2017, 22:40     Titel:
  Antworten mit Zitat      
Okay, ich hab den Fehler gefunden.
Matlab liefert wchar_t Typen. Die obrige Parameterbeschreibung war leider falsch. Es muss heißen:

Code:

        ELEMDESC myParams[2] = { 0 };
        myParams[0].tdesc.vt = VT_BSTR;                // IpAddress
        myParams[0].tdesc.lptdesc = NULL;
        myParams[1].tdesc.vt = VT_UI4;                // Port
 


Die C Schnittstelle:

Code:

STDMETHOD_(uint32_t,TcpIpOpen)(BSTR IpAddress,uint32_t Port) PURE;
 

Wobei BSTR laut Windows Dokumentation beschrieben ist als:
Code:

typedef WCHAR OLECHAR;
typedef OLECHAR* BSTR;
typedef BSTR* LPBSTR;
 


Wenn ich mit wchar_t arbeite, funktioniert es.

Viele Grüße,
TinTin
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2025 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.