| |

VB.NET - Ein- und UmsteigerVB6-String an externes Programm per COM übergeben | |  | Autor: MisterCP | Datum: 06.01.21 09:19 |
| Hallo,
ich bin gerade dabei ein VB6-Programm neu in VB.Net zu verfassen.
Dabei bestehet die Aufgabe, einen String an ein externes C#-Programm per COM zu übergeben.
Das Lesen über die Schnittstelle (c# => VB.Net) funktioniert, aber ich kann keinen String an das C#-Programm senden.
im VB6-Programm konnte ich einfach folgendes machen: (die Zahlen sind Zieladressen)
Dim txt as String
txt = "irgendwas"
AISExport.sExp(49, 2, AisErr) = txt unter VB.Net erhalte ich den Fehler: Typenkonflikt. (Ausnahme von HRESULT: 0x80020005 (DISP_E_TYPEMISMATCH)
Ich habe auch schon probiert, den String als ByteArray zu übergeben, ändert am Ergbenis leider nichts.
Dim txt() As Byte
txt = System.Text.Encoding.UTF8.GetBytes("kjtgfzutrf")
AISExport.sExp(49, 2, AisErr) = txt Habt ihr noch einen Tip, wie ich den String übergeben könnte?
Vielen Dank schon mal |  |
Re: VB6-String an externes Programm per COM übergeben | |  | Autor: effeff | Datum: 06.01.21 21:50 |
| Den Typen solltest Du doch aus dem Objekt "AISExport" herausfinden können. Wenn es ein String ist, warum willst Du die Daten dann als Byte übergeben?
EALA FREYA FRESENA |  |
Re: VB6-String an externes Programm per COM übergeben | |  | Autor: MisterCP | Datum: 06.01.21 22:23 |
| Hallo effeff,
ich habe von dem Programm nur eine Beschreibung in Form einer Hilfedatei. Nach dieser Hilfe hatte ich damals das VB6-Programm geschrieben und das alte Programm funktioniert auch nach wie vor unter Win10.
in der Doku steht:
[id(8), propput] void sExp(long hExp, long nExp, long* nErr, BSTR lpszNewValue);
[id(10), propput] void sExpLgu(long hExp, long nExp, long nLgu, long* nErr, _
BSTR lpszNewValue); bzw. (für VB6!)
Private Sub TestButton_Click()
Dim Export As Object
Set Export = CreateObject("AisAnl.ExpCom")
Dim hExp As Long
hExp = Export.hExp("SysParAna")
If hExp > 0 Then
Dim sExp As String
Dim nErr As Long
'Erste Zeile Exporttext lesen
sExp = Export.sExp(hExp, 1, nErr)
Debug.Print "1. Exportwert: ", sExp
'Ausgabe: 1. Exportwert: Maximale Schubzeit [min]
If nErr = 0 Then
'Erste Zeile Exporttext schreiben
Export.sExp(hExp, 1, nErr) = "Neue Bezeichnung"
Debug.Print "1. Exportwert: ", Export.sExp(hExp, 1, nErr) nach Anpassung der früheren Long-Variablen durch Int32 funktioniert es bis einschließlich Lesen.
nur das Schreiben eben nicht mehr.
aber auch
Dim pTxt As System.IntPtr
pTxt = System.Runtime.InteropServices.Marshal.StringToBSTR("zujitfzutf")
AISExport.sExp(49, 2, AisErr) = pTxt bringt nach wie vor den gleichen Fehler.
Früher unter VB6 konnte ich einfach einen String zurückschreiben und gut, aber VB.Net macht da irgendwas anders. |  |
Re: VB6-String an externes Programm per COM übergeben | |  | Autor: MisterCP | Datum: 07.01.21 18:36 |
| Hallo Manfred,
der Tip sieht vielversprechend aus, aber leider stelle ich mich zu doof an, damit eine Variable zu deklarieren. Würdest du mir bei der Syntax (oder Vorgehensweise) der Deklaration helfen? |  |
Re: VB6-String an externes Programm per COM übergeben | |  | Autor: Manfred X | Datum: 08.01.21 07:24 |
| Hallo!
Mich irritiert, dass es sich um ein C#-Programm handelt, mit dem
Du kommunizieren willst. Es sollte möglich sein, z.B. per Stringbuilder-Variable
Zeichenfolgen direkt (ohne Angaben zum Marshalling) zu übertragen.
VB.Net und C# operieren auf der gleichen Framework-Plattform.
Aus diesem Grund hast Du es mit verwalteten Datentypen zu tun. |  |
Re: VB6-String an externes Programm per COM übergeben | |  | Autor: MisterCP | Datum: 08.01.21 07:36 |
| Hallo Manfred,
nun bewege ich mich in noch größerer Entfernung von vorhandener Ahnung.
in den Dateieigenschaften steht was von MFC-Anwendung. Und wenn ich das in der Suchmaschine eingebe, spricht er von C++, was anscheinend wieder deutliche Unterschiede zu C# hat. Sorry das war mir vorher nicht klar. |  |
Re: VB6-String an externes Programm per COM übergeben | |  | Autor: Manfred X | Datum: 08.01.21 09:50 |
| Hallo!
Zur Orientierung:
MFC steht für "Microsoft Foundation Classes".
Das war ein Klassenmodell, die insbesondere für die damalige
Visual C++ Entwicklung eingesetzt werden konnte.
Wir befinden uns dabei in Mitte/Ende der 90er Jahre.
Das letzte Programm mit dieser Umgebung habe ich vor
ca. 18 Jahren geschrieben.
C++ ist eine völlig andere Programmiersprache als C#.
C# ist die "Basissprache" des Net-Framework und eine wesentlich
spätere Entwicklung als die Sprache C++, deren Anfänge bereits
in den 70er Jahren liegen, die später für die objekt-orientierte
Programmierung durch Klassenmodelle stark ausgebaut worden ist.
Versuche, die String-Parameter mit Variablen des Typs
System.Text.Stringbuilder zu belegen, die Du bei der Deklaration
im Konstruktor mit einer hinreichenden Zahl von Leerzeichen
versiehst. Wie viele das mindestens sein müssen, kann nur die
Dokumentation lehren oder es muss durch Probieren gefunden werden.
Vorsicht: Hier drohen eventuell Abstürze. |  |
Re: VB6-String an externes Programm per COM übergeben | |  | Autor: MisterCP | Datum: 13.01.21 18:54 |
| Hallo Manfred,
meine Versuche mit deinem Tip haben leider auch nichts gebracht, was aber wahrscheinlich nicht am falschen Tip lag, sondern an einer sehr merkwürdigen anderen Beobachtung.
Wärend ich aus VB6 heraus die Schnittstelle wie Eingangs beschrieben mit
Dim txt as String
txt = "irgendwas"
AISExport.sExp(49, 2, AisErr) = txt nach wie vor erfolgreich ansprechen kann, muss ich im VB.Net-Programm
Dim txt as String
txt = "irgendwas"
AISExport.sExp(49, 2, AisErr, txt) verwenden. Wohlgemerkt bei gleicher Version des AIS-Programms und gleicher Betriebssystemumgebung.
Mir ist völlig schleierhaft warum das so ist, aber es funktioniert. |  |
 | Sie sind nicht angemeldet! Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.
Einloggen | Neu registrieren |
  |
|
Access-Tools Vol.1 
Über 400 MByte Inhalt
Mehr als 250 Access-Beispiele, 25 Add-Ins und ActiveX-Komponenten, 16 VB-Projekt inkl. Source, mehr als 320 Tipps & Tricks für Access und VB
Nur 24,95 EURWeitere Infos
Tipp des Monats Januar 2021 Dieter OtterPopUp-Menü wird nicht angezeigt :-(In diesem Tipp verraten wir Ihnen, wie Sie Probleme mit PopUp-Menüs umgehen können, wenn diese unter bestimmten Umständen einfach nicht angezeigt werden. sevGraph (VB/VBA) 
Grafische Auswertungen
Präsentieren Sie Ihre Daten mit wenig Aufwand in grafischer Form. sevGraph unterstützt hierbei Balken-, Linien- und Stapel-Diagramme (Stacked Bars), sowie 2D- und 3D-Tortendiagramme und arbeitet vollständig datenbankunabhängig! Weitere Infos |