Welcome, Guest
Username: Password: Remember me
Hier wird Deutsch gesprochen

TOPIC:

com_module_sample 07 Apr 2022 11:19 #22108

  • lagraf
  • lagraf's Avatar
  • Topic Author


  • Posts: 310
  • Hallo Leute,
    ich bin zwar bereits in Rente, möchte meine bestehenden VO Programme draussen aber weiterhin betreuen. Diese setzen eine C# Dll ein, welche nicht mehr betreut wird, da es die Firma nicht mehr gibt. Deshalb möchte ich als ersten Schritt diese C# Dll durch eine eigene X# Dll ersetzen, dazu sind folgende Maßnahmen und Programmteile für diese Dll erforderlich:
    • QRCode erstellen und als File speichern: erledigt
    • Zugriff auf USB Smartcard und Verschlüsselung der Daten über diese: offen
    • Erstellung eines X# Com Modules für die Einbindung in VO: in Arbeit
    Sollte irgendwann VO nicht mehr auf einer neuen Win Version laufen, müßte ich die Programme auf X# umstellen, was aber aufgrund einer erfolgten Testumstellung des umfangreichsten Programms kein Problem sein sollte. Die X# Dll kann dann weiters verwendet werden, ev. sogar abgespeckt, da ja dann direkt drauf zugegriffen werden kann.

    Ich habe mich deshalb mit dem com_module_sample in der X# Doku beschäftigt, habe eine COMTest Dll in der XIDE erstellt mit dem Interface und dem Programmcode. Ausserdem habe ich eine GUID erstellt.

    Nun bin ich beim Schritt mit SN.EXE angelangt:
    • Wie bekomme ich sn.exe wenn ich Visual Studio nicht habe, im .NET 4.8 scheint es das Prog nicht zu geben?
    • Läuft sn.exe überhaupt noch auf meinem Win7 32bit Rechner?

    Please Log in or Create an account to join the conversation.

    com_module_sample 07 Apr 2022 11:28 #22109

    • wriedmann
    • wriedmann's Avatar


  • Posts: 3195
  • Hallo Franz,
    sn.exe sollte Teil von Visual Studio oder der Entwicklerversion des .NET Frameworks sein.
    Wenn Du mir sagst, wie dieses Modul heißen soll, kann ich Dir das erstellen und schicken - halt erst am Abend.
    Wolfgang
    Wolfgang Riedmann
    Meran, South Tyrol, Italy

    www.riedmann.it - docs.xsharp.it

    Please Log in or Create an account to join the conversation.

    com_module_sample 07 Apr 2022 12:39 #22110

    • lagraf
    • lagraf's Avatar
    • Topic Author


  • Posts: 310
  • Danke für dein Angebot, ich würde das aber eigentlich gerne selber ausprobieren, weiß ja nicht was sonst noch an Com enabled Dlls daherkommen wird.

    Muss man das gesamte VisualStudio installieren oder gibts auch einen kleineren Teil der das sn.exe enthält?

    Auf der Seite docs.microsoft.com/en-us/dotnet/framework/tools/
    ist beschrieben, dass sn.exe in den .NET Framework Tools enthalten ist. Ich finde aber nirgends einen Downloadlink dafür (außer dem Link zum VisualStudio).

    Please Log in or Create an account to join the conversation.

    Last edit: by lagraf.

    com_module_sample 07 Apr 2022 15:58 #22111

    • ic2
    • ic2's Avatar


  • Posts: 1555
  • Hallo Franz,

    lagraf wrote:

  • Wie bekomme ich sn.exe wenn ich Visual Studio nicht habe, im .NET 4.8 scheint es das Prog nicht zu geben?
  • Läuft sn.exe überhaupt noch auf meinem Win7 32bit Rechner?
  • [/ul]


    Ich würde sagen, dass es auch im Microsoft SDK enthalten sein sollte, hier die Links für Windows 7 & 10

    www.microsoft.com/en-us/download/details.aspx?id=8279
    developer.microsoft.com/en-us/windows/downloads/windows-sdk/

    Dick

    Please Log in or Create an account to join the conversation.

    com_module_sample 11 Apr 2022 17:50 #22132

    • lagraf
    • lagraf's Avatar
    • Topic Author


  • Posts: 310
  • Hallo Dick und Wolfgang,
    das Windows SDK habe ich installiert, allerdings nicht die vollen 2,8GB sondern nur den Teil ".NET Framework 4.8 Software Development Kit", der das sn.exe enthält (Übrigens: die aktuelle Version von Visual Studio Community läuft nicht mehr auf 32bit, sonst hätte ich diese stattdessen genommen).

    Dann habe ich das Beispiel mit der COMTest Dll ausprobiert und alle Schritte durchgeführt.
    Die erzeugte Dll in den VO App Ordner kopiert.
    In VO den Automation Server anhand der TLB generieren lassen
    Die beiden Guids in die Init Methode eingetragen
    Einen Menüpunkt DoComTest() angelegt der die Klasse mit Methode Output() aufruft
    Fehlerfrei compiliert
    CLASS ICOMTester INHERIT OLEAutoObjectEx
    METHOD Init(ObjID, fROTCHECK) CLASS ICOMTester
    
    	SELF:cProgID := "COMTest.COMTester"
    	SELF:cClsID := "{2F152684-E19F-44fe-8773-7EB706D08215}"
    	SELF:cIID := "{13D9D15C-F8C8-4936-AF2C-0FAC08A31859}"
    	SUPER:Init(ObjID, 0, .T., fRotCheck)
    	SELF:_dwFuncs	:= 1
    	SELF:_dwVars 	:= 0
    	RETURN SELF
    	
    METHOD Output(		) CLASS ICOMTester
    
    	LOCAL oMethod  	AS cOleMethod
    	LOCAL uRetValue	AS USUAL
    
    	oMethod		      	:= cOleMethod{}
    	oMethod:symName	  	:= String2Symbol("Output")
    	oMethod:iMemberid  	:= 1 
    	oMethod:wInvokeKind	:= INVOKE_METHOD  
    	oMethod:bRetType   	:= VT_BSTR 
    
    	uRetValue := SELF:__Invoke(oMethod, DWORD(_BP+16),PCount())
    
    	RETURN (uRetValue)
    
    METHOD DoComTest() CLASS StandardShellWindow
    	LOCAL oCom AS ICOMTester
    	
    	oCom := ICOMTester{}
    	oCom:Output()
    	
    	RETURN SELF
    Wenn ich den Menüpunkt aufrufe, erhalte ich die im Anhang befindliche Fehlermeldung.
    Was kann das Problem sein?
    Bei Bedarf kann ich die beiden Apps (X# und VO) hochladen.
    Attachments:

    Please Log in or Create an account to join the conversation.

    Last edit: by lagraf.

    com_module_sample 11 Apr 2022 18:01 #22133

    • wriedmann
    • wriedmann's Avatar


  • Posts: 3195
  • Hallo Franz,
    ich nehme an, das ist ein Problem des Manifests.
    Zur Fehlerbehebung brauche ich ggf. die kompilierte DLL und den Quellcode des VO-Programmes.
    Wolfgang
    Wolfgang Riedmann
    Meran, South Tyrol, Italy

    www.riedmann.it - docs.xsharp.it

    Please Log in or Create an account to join the conversation.

    com_module_sample 11 Apr 2022 18:22 #22137

    • lagraf
    • lagraf's Avatar
    • Topic Author


  • Posts: 310
  • Hab alles soeben hergerichtet für den Upload

    File Attachment:

    File Name: COMTestVO.zip
    File Size:16 KB

    File Attachment:

    File Name: COMTestXSharp.zip
    File Size:13 KB
    Attachments:

    Please Log in or Create an account to join the conversation.

    Last edit: by lagraf.

    com_module_sample 11 Apr 2022 20:48 #22139

    • wriedmann
    • wriedmann's Avatar


  • Posts: 3195
  • Hallo Franz,
    nur mal ganz schnell: die COMtest.dll hat kein Manifest eingebunden.
    Ich muss noch schauen, an was das liegt - so auf den ersten Blick sehe ich keinen Fehler.
    Wolfgang
    Wolfgang Riedmann
    Meran, South Tyrol, Italy

    www.riedmann.it - docs.xsharp.it

    Please Log in or Create an account to join the conversation.

    com_module_sample 12 Apr 2022 08:17 #22142

    • wriedmann
    • wriedmann's Avatar


  • Posts: 3195
  • Hallo Franz,
    wenn ich die Manifest.CREATEPROCESS_MANIFEST_RESOURCE_ID.rc so abändere:
    #define RC_RT_MANIFEST 24
    #define CREATEPROCESS_MANIFEST_RESOURCE_ID 1
    CREATEPROCESS_MANIFEST_RESOURCE_ID RC_RT_MANIFEST "COMTest.dll.manifest"
    wird das Manifest korrekt in die DLL eingebunden.
    Das VO-Programm startet dann aber immer noch nicht:
    Fehler beim Generieren des Aktivierungskontextes für "c:\temp\ComTest\TestApp.DBG". Fehler in Manifest- oder Richtliniendatei "c:\temp\ComTest\COMTest.DLL" in Zeile  8. Die im Manifest gefundene Komponenten-ID stimmt nicht mit der ID der angeforderten Komponente überein. Verweis: COMTest,publicKeyToken="2c2c7758cea301ed",type="win32",version="0.0.0.0". Definition: COMTest,processorArchitecture="x86",publicKeyToken="2c2c7758cea301ed",type="win32",version="0.0.0.0". Verwenden Sie das Programm "sxstrace.exe" für eine detaillierte Diagnose.
    Du musst die Zeile
    processorArchitecture="x86"
    aus dem Manifest entfernen.
    Dann startet das Programm, der Aufruf der ComTest bringt aber noch einen Fehler.
    Ich habe jetzt keine Zeit mehr, der Sache weiter nachzugehen, erst heute abend oder morgen früh wieder.
    Wolfgang
    Wolfgang Riedmann
    Meran, South Tyrol, Italy

    www.riedmann.it - docs.xsharp.it

    Please Log in or Create an account to join the conversation.

    com_module_sample 12 Apr 2022 11:19 #22144

    • lagraf
    • lagraf's Avatar
    • Topic Author


  • Posts: 310
  • Hallo Wolfgang,
    das Manifest sollte schon eingebunden sein wie in der XIDE ersichtlich:

    Wenn ich die Dll prüfe erhalte ich die Anzeige:

    Was bewirken die beiden #defines, sind die immer gleich einzutragen oder variieren die?
    Attachments:

    Please Log in or Create an account to join the conversation.

    com_module_sample 12 Apr 2022 11:43 #22145

    • wriedmann
    • wriedmann's Avatar


  • Posts: 3195
  • Hallo Franz,
    ich habe mit einem Tool kontrolliert, ob in der DLL das Manifest drin ist - und das war es nicht.
    Nach dem Hinzufügen der beiden defines und Berichtigen des Eintrages war das Manifest in der DLL enthalten (immer laut meinem Tool).
    Die defines sind immer gleich.
    Wolfgang
    Wolfgang Riedmann
    Meran, South Tyrol, Italy

    www.riedmann.it - docs.xsharp.it

    Please Log in or Create an account to join the conversation.

    com_module_sample 14 Apr 2022 11:22 #22173

    • lagraf
    • lagraf's Avatar
    • Topic Author


  • Posts: 310
  • Hallo Wolfgang,
    ich habe deine Änderungen nachgezogen, bekomme beim Aufruf der Methode ICOMTESTER:OUTPUT aus VO die Meldung "OLE AutoObject has not been initialized or is already destroyed" . Ist das die gleiche Meldung, die auch du bekommst?

    Sollte man die beiden defines nicht in der X# Doku ergänzen?

    Please Log in or Create an account to join the conversation.

    com_module_sample 14 Apr 2022 11:26 #22174

    • wriedmann
    • wriedmann's Avatar


  • Posts: 3195
  • Hallo Franz,
    das ist genau die Meldung, die ich bekomme, wenn ich die erfolgreiche Erstellung des Ole-Objektes nicht abfrage:
    METHOD DoComTest() CLASS StandardShellWindow
    LOCAL oCom AS ICOMTester
    	
    oCom := ICOMTester{} 
    if oCom:fInit
    	oCom:Output()
    else
    	ErrorBox{ self, "Fehler beim Initialisieren" }:Show()
    endif
    	
    RETURN SELF

    Ich hatte leider noch nicht genügend Zeit, mich weiter damit zu beschäftigen.

    Wolfgang
    Wolfgang Riedmann
    Meran, South Tyrol, Italy

    www.riedmann.it - docs.xsharp.it

    Please Log in or Create an account to join the conversation.

    com_module_sample 20 Apr 2022 10:28 #22231

    • wriedmann
    • wriedmann's Avatar


  • Posts: 3195
  • Hallo Franz,
    habe mich heute noch eine Weile damit beschäftigt, es aber nicht zum Laufen bekommen - keine Ahnung warum.
    Interessanterweise habe ich aber gleichzeitig eine COM-DLL geschrieben, die mir den Zugriff auf das Google Ads API erlaubt - und die hat auf Anhieb funktioniert.
    Wolfgang
    Wolfgang Riedmann
    Meran, South Tyrol, Italy

    www.riedmann.it - docs.xsharp.it

    Please Log in or Create an account to join the conversation.

    com_module_sample 20 Apr 2022 10:50 #22233

    • lagraf
    • lagraf's Avatar
    • Topic Author


  • Posts: 310
  • Hallo Wolfgang,
    danke für deine Bemühungen!
    Es ist halt blöd, wenn das X# Beispiel in der Doku 1:1 durchgespielt nicht funktioniert und die COM Schnittstelle so "empfindlich" ist. Hast du ein anderes, simples COM Testbeispiel, das vielleicht nur einen Text ausgibt oder 2 Zahlen addiert und das Ergebnis ausgibt? Dann könnte ich mal ausprobieren ob das bei mir läuft.

    Please Log in or Create an account to join the conversation.

    com_module_sample 20 Apr 2022 11:36 #22237

    • wriedmann
    • wriedmann's Avatar


  • Posts: 3195
  • Hallo Franz,
    leider ist die COM-Schnittstelle sehr empfindlich - bis sie mal läuft.
    Laut dem, was ich gefunden habe, ist das ein Versionsproblem in der DLL:
    stackoverflow.com/questions/93879/hresul...ion-does-not-match-t
    Nur komme ich beim besten Willen nicht drauf, wo es hängt, denn es ist immer die Version 1.0.0.0, die ich zurückbekomme.
    Und im EventViewer bekomme ich keinen Fehler, genauso wenig wie mit sxstrace.
    Hast Du eigentlich die GUIDs neu generiert?
    Wolfgang
    Wolfgang Riedmann
    Meran, South Tyrol, Italy

    www.riedmann.it - docs.xsharp.it

    Please Log in or Create an account to join the conversation.

    com_module_sample 20 Apr 2022 11:40 #22238

    • wriedmann
    • wriedmann's Avatar


  • Posts: 3195
  • Hallo Franz,
    ich werde heute abend versuchweise eine neue DLL ganz von vorne bauen.
    Hast Du einen Wunsch für den Namen?
    Wolfgang
    Wolfgang Riedmann
    Meran, South Tyrol, Italy

    www.riedmann.it - docs.xsharp.it

    Please Log in or Create an account to join the conversation.

    com_module_sample 20 Apr 2022 12:32 #22240

    • lagraf
    • lagraf's Avatar
    • Topic Author


  • Posts: 310
  • Hallo Wolfgang,
    die beiden GUIDS habe ich hintereinander mit GuidGen erzeugt.
    Kann es ev. stören dass die Versionsnummer in COMTest.dll.manifest 0.0.0.0 ist, sie wurde so autom. erstellt.
    Ich hab keine Eile bei der DLL, du weißt ja ich bin in Rente <g>, als Name vielleicht COMTestWR, ich vergleiche sie dann mit meiner COMTest.

    Please Log in or Create an account to join the conversation.

    com_module_sample 23 Apr 2022 16:16 #22281

    • wriedmann
    • wriedmann's Avatar


  • Posts: 3195
  • Hallo Franz,
    das funktioniert jetzt - war ein Problem im Manifest der COM-DLL.

    Hier findest Du die Quellen der DLL und der VO-Exe:

    File Attachment:

    File Name: ComTestF.zip
    File Size:112 KB

    Und so sollte das Manifest ausschauen:
    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <assembly
    	xmlns="urn:schemas-microsoft-com:asm.v1"
    	manifestVersion="1.0">
    	<assemblyIdentity
    		name="COMTestFR"
    		version="1.0.0.0"
    		publicKeyToken="0359fa75d6c66754"
    		type="Win32">
    	</assemblyIdentity>
    	<clrClass
    		clsid="{CA36EE8F-120A-4943-9CE2-ACC310AB62A8}"
    		progid="COMTestFR.ComTesterFR"
    		name="COMTestFR.ComTesterFR"
    		runtimeVersion="v4.0.30319">
    	</clrClass>
    	<file
    		name="COMTestFR.dll"
    		>
    	</file>
    </assembly>

    Wolfgang
    Wolfgang Riedmann
    Meran, South Tyrol, Italy

    www.riedmann.it - docs.xsharp.it
    Attachments:

    Please Log in or Create an account to join the conversation.

    com_module_sample 24 Apr 2022 09:21 #22288

    • lagraf
    • lagraf's Avatar
    • Topic Author


  • Posts: 310
  • Hallo Wolfgang,
    ich habe das gesamte ZIP File nach C:\temp\COMTest entpackt, die AEF importiert und compiliert. Allerdings startet die COMTestF App nicht (Create Process Failed).

    Warum sind in der AEF IComTester und IComTesterFR vorhanden und im Manifest ComTestF und ComTestFR definiert?

    Please Log in or Create an account to join the conversation.

    Moderators: wriedmann