Page 1 of 5
com_module_sample
Posted: Thu Apr 07, 2022 9:19 am
by lagraf
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?
com_module_sample
Posted: Thu Apr 07, 2022 9:28 am
by wriedmann
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
com_module_sample
Posted: Thu Apr 07, 2022 10:39 am
by lagraf
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
https://docs.microsoft.com/en-us/dotnet ... ork/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).
com_module_sample
Posted: Thu Apr 07, 2022 1:58 pm
by ic2
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?
[/list]
Ich würde sagen, dass es auch im Microsoft SDK enthalten sein sollte, hier die Links für Windows 7 & 10
https://www.microsoft.com/en-us/downloa ... px?id=8279
https://developer.microsoft.com/en-us/w ... ndows-sdk/
Dick
com_module_sample
Posted: Mon Apr 11, 2022 3:50 pm
by lagraf
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
Code: Select all
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.
- Bild1.jpg (23.21 KiB) Viewed 633 times
com_module_sample
Posted: Mon Apr 11, 2022 4:01 pm
by wriedmann
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
com_module_sample
Posted: Mon Apr 11, 2022 4:22 pm
by lagraf
Hab alles soeben hergerichtet für den Upload
com_module_sample
Posted: Mon Apr 11, 2022 6:48 pm
by wriedmann
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
com_module_sample
Posted: Tue Apr 12, 2022 6:17 am
by wriedmann
Hallo Franz,
wenn ich die Manifest.CREATEPROCESS_MANIFEST_RESOURCE_ID.rc so abändere:
Code: Select all
#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:
Code: Select all
Fehler beim Generieren des Aktivierungskontextes für "c:tempComTestTestApp.DBG". Fehler in Manifest- oder Richtliniendatei "c:tempComTestCOMTest.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
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
com_module_sample
Posted: Tue Apr 12, 2022 9:19 am
by lagraf
Hallo Wolfgang,
das Manifest sollte schon eingebunden sein wie in der XIDE ersichtlich:
- COMTestManifest2.jpg (60.17 KiB) Viewed 632 times
Wenn ich die Dll prüfe erhalte ich die Anzeige:
- COMTestManifest1.jpg (11.37 KiB) Viewed 632 times
Was bewirken die beiden #defines, sind die immer gleich einzutragen oder variieren die?