Page 1 of 1
X# Com module für VO apps
Posted: Fri Apr 12, 2024 6:49 am
by lagraf
Hallo,
ich habe mir vor einiger Zeit eine X# DLL geschrieben und als com module definiert, um damit eine Fremd DLL 1:1 abzulösen, die in einigen VO apps verwendet wird. Über einen VO wrapper, den ich in die VO apps als Lib einbinde, spreche ich die X# Methoden an.
Die erste VO app, die ich damals nach Erstellung der X# DLL umgestellt habe, funktioniert einwandfrei. Die VO apps, die ich in den letzten Tagen umgestellt habe, bekommen nach dem Aufruf der X# Init Methode FALSE zurück und können somit keine Methoden aufrufen.
Ich habe mir in beiden Fällen im VO Debugger die Variablen nach dem Init Aufruf angesehen:
- RBKassa funktioniert
- NMKassa funktioniert nicht -> _finit = .F. und afuncdesc ist ein NULL_ARRAY
Sonst ist alles gleich.
Kann das etwas mit dem Manifest zu tun haben, dass nur die erste VO app funktioniert?
Muss die VO app auch irgendwie definiert werden?
Wenn ich die VO apps auf die Fremd DLL rückstelle, funktionieren alle.
Franz
Re: X# Com module für VO apps
Posted: Fri Apr 12, 2024 6:59 am
by wriedmann
Hallo Franz,
zwei Dinge: jede VO-App, die die COM-DLL verwendet, muss das korrekte Manifest haben. Außerdem muss die DLL und alle Abhängigkeiten im Ordner vorhanden sein - im Pfad reicht nicht.
Schau mal im Ereignis-Protokoll nach, und sonst hier:
https://docs.xsharp.it/doku.php?id=com_module_sample wie sich das mit sxstrace verfolgen lässt.
Wolfgang
Re: X# Com module für VO apps
Posted: Fri Apr 12, 2024 7:56 am
by lagraf
Hallo Wolfgang,
- alle VO apps und DLLs sind im gleichen Ordner, das kann ich ausschließen.
- mit der X# DLL kommt nur die VO Wrapper app in Berührung, die in die VO apps als Lib eingebunden wird. Haben die VO apps dann trotzdem unterschiedliche Manifeste? In der Doku steht nur "hopefully your VO application has a manifest. Add a reference to your COM dll" aber nicht wie diese für die VO apps aussehen soll. Hier mein Manifest:
Code: Select all
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity
version="1.0.0.0"
processorArchitecture="X86"
name="VO.Application"
type="win32"
/>
<description>Visual Objects Application.</description>
<dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0"
processorArchitecture="X86"
publicKeyToken="6595b64144ccf1df"
language="*"
/>
</dependentAssembly>
</dependency>
<dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="RKSVComEnabledX"
version="1.0.0.0"
publicKeyToken="ec885d9ecb42e9c7"
>
</assemblyIdentity>
</dependentAssembly>
</dependency>
</assembly>
- sxstrace muss ich noch als Admin probieren, bisher bekam ich einen Fehler beim Aufruf, da ich es nicht als Admin probiert habe.
Franz
Re: X# Com module für VO apps
Posted: Fri Apr 12, 2024 8:02 am
by lagraf
NACHTRAG:
Ich hatte bisher bei den nicht funktionierenden VO apps %appwiz% beim Pfad des Manifests drin, beim funktionierenden den Pfad hardcoded, damit dürfte auf ein falsches Manifest gezeigt worden sein. Habe nun alle Manifest Pfade auf hardcoded geändert, hoffe das passt nun. Muss aber nun zum Arzt, probiers danach aus!
Franz
Re: X# Com module für VO apps
Posted: Fri Apr 12, 2024 8:44 am
by wriedmann
Hallo Franz,
wenn Du nicht im Manifest im AppWiz-Verzeichnis Deinen Eintrag drin hast, dann war das der Grund
Wenn Du einen Manifest-Viewer verwendest, dann kannst Du das Manifest einer Exe oder DLL anschauen. Ist manchmal nicht schlecht beim Fehlersuchen.
Hier wäre einer:
https://weblogs.asp.net/kennykerr/manifest-view-1-0
Wolfgang
Re: X# Com module für VO apps
Posted: Fri Apr 12, 2024 9:21 am
by lagraf
Hallo Wolfgang,
bin wieder zurück!
Mit dem fixen Pfad auf das Manifest funktionierts nun, weiß nicht wo %AppWiz" hinzeigt, aber nicht auf den App Ordner. Wahrscheinlich ist mit %AppWiz% wohl eher der VO Ordner gemeint.
Allerdings verwende ich das gleiche Manifest für alle VO apps, die mit der X# DLL arbeiten.
Den Manifest Viewer lade ich mir runter, kann ich sicher gebrauchen.
Franz