Seite 1 von 1

COM-DLL ohne Registrierung nutzen ?

Verfasst: Fr, 17. Jan 2014 9:43
von brandelh
Hi,

normalerweise wird ja eine ActiveX/COM DLL vom Installationsprogramm registriert und danach genutzt.
Kann man das aber auch ohne Registrierung nutzen wie eine normale DLL ?

Hintergrund ist der, dass ich ein Programm nicht installieren will, sondern nur in ein Verzeichnis kopieren.
Diese COM DLL würde ich beilegen, kann ich diese dann aber auch ansprechen ?

PS: Ich habe die DLL noch nicht erworben und wollte VORHER sicher sein sie auch nutzen zu können ;-)

Re: COM-DLL ohne Registrierung nutzen ?

Verfasst: Fr, 17. Jan 2014 12:01
von Koverhage
Denke mal an Quick PDF, dort gibst Du ja auch nur die DLL mit.
Wenn Du jetzt die ActiveX DLL nimmst was passiert dann ?

Re: COM-DLL ohne Registrierung nutzen ?

Verfasst: Fr, 17. Jan 2014 13:33
von brandelh
Die DLL, die ich bei QuickPDF verwende ist eben KEINE ActiveX DLL und kann daher einfach so mit ot4xb verwendet werden.

Und bevor ich Zeit und Geld in eine ActiveX/COM DLL Bibliothek stecke, dachte ich mir frage doch mal die die sich mit ActiveX auskennen ;-)

Re: COM-DLL ohne Registrierung nutzen ?

Verfasst: Fr, 17. Jan 2014 13:40
von Tom
Ohne Registrierung stehen die Funktionen der DLL nicht in der COM-Schnittstelle zur Verfügung. Die DLL veröffentlicht ihre Funktionen auch nicht wie eine normale DLL, sondern nur über die Schnittstelle.

Deine Applikation kann aber prüfen, ob die Bibliothek zur Verfügung steht, indem sie beispielsweise die Registry nach der CLSID oder GUID scannt (Funktionen hierzu gibt es m.E. im Forum). Ist sie nicht vorhanden, ließe sie sich beispielsweise durch einen Batchaufruf von REGSVR32 installieren. Dafür sind jedoch in aller Regel Adminrechte nötig.

Re: COM-DLL ohne Registrierung nutzen ?

Verfasst: Fr, 17. Jan 2014 14:52
von brandelh
Danke TOM,

das hatte ich befürchtet, wollte aber sicher gehen.
Adminrechte oder Aufruf von RegSrv32 möchte ich genauso vermeiden, wie die träge Ausführungsgeschwindigkeit von Xbase++ bei Active X ;-)

Re: COM-DLL ohne Registrierung nutzen ?

Verfasst: Fr, 17. Jan 2014 23:53
von AUGE_OHR
Tom hat geschrieben:Ohne Registrierung stehen die Funktionen der DLL nicht in der COM-Schnittstelle zur Verfügung.
Die DLL veröffentlicht ihre Funktionen auch nicht wie eine normale DLL, sondern nur über die Schnittstelle.
hm ... was war zuerst da : DLL oder OCX ...

OCX als activeX bedeutet du nur das ich über die iDispatch COM Schnittstelle kommunizieren "kann"

angenommen WMP.OCX, was ja für VB als activeX gedacht ist, dessen Grösse ist nur 20KB.
angesprochen wird nun die WMP.DLL (4.8MB) was man unter C# direkt macht.

anders nun bei Codejock wo die OCX auch gleichzeitig die DLL ist.
wenn du OCX und DLL geliefert bekommst würde ich mir die Grösse der OCX ansehen.
wenn die OCX wie bei WMP so klein ist dann enthält die meisten "nur" die COM Schnittstelle ( für VB User )

! Note : unter Win 7 / 8 gibt es ja kein WMP.OCX mehr aber trotzdem ist die CLSID vorhanden und gültig.
Es muss also evtl. die CLSID von der OCX in der Registry eingetragen sein damit die DLL funktioniert !
brandelh hat geschrieben:wie die träge Ausführungsgeschwindigkeit von Xbase++ bei Active X ;-)
wenn du mit der aktuellen ot4xb arbeitest kannst du doch die eingebauten Function nutzen
Pablo Botella
2. Oktober 2013
Re: DispHPR / ot4xb

>how to use DispHPR inside ot4xb ?

I've just linked the disphpr module inside ot4xb
Functions:
_DH_CREATEOBJECT , _DH_GETOBJECT , _DH_CREATEOBJECTEX , _DH_GETOBJECTEX , _DH_CALLMETHOD , _DH_PUTVALUE , _DH_PUTREF , _DH_GETVALUE , _DH_INVOKE , _DH_INVOKEARRAY , _DH_CALLMETHODV , _DH_PUTVALUEV , _DH_PUTREFV , _DH_GETVALUEV , _DH_INVOKEV , _DH_ENUMBEGIN , _DH_ENUMBEGINV , _DH_ENUMNEXTOBJECT , _DH_ENUMNEXTVARIANT , _DH_TOGGLEEXCEPTIONS

will be used exactly like @disphpr:func( params... )
so @disphpr:dhCreateObject( params ..... ) will be _dh_CreateObject( params ..... )

>Old Syntax does not work ?
still work but you need to keep the disphrp.dll

Re: COM-DLL ohne Registrierung nutzen ?

Verfasst: So, 09. Mär 2014 12:24
von brandelh
AUGE_OHR hat geschrieben:
brandelh hat geschrieben:wie die träge Ausführungsgeschwindigkeit von Xbase++ bei Active X ;-)
wenn du mit der aktuellen ot4xb arbeitest kannst du doch die eingebauten Function nutzen
Pablo Botella
2. Oktober 2013
Re: DispHPR / ot4xb

>how to use DispHPR inside ot4xb ?

I've just linked the disphpr module inside ot4xb
Functions:
_DH_CREATEOBJECT , _DH_GETOBJECT , _DH_CREATEOBJECTEX , _DH_GETOBJECTEX , _DH_CALLMETHOD , _DH_PUTVALUE , _DH_PUTREF , _DH_GETVALUE , _DH_INVOKE , _DH_INVOKEARRAY , _DH_CALLMETHODV , _DH_PUTVALUEV , _DH_PUTREFV , _DH_GETVALUEV , _DH_INVOKEV , _DH_ENUMBEGIN , _DH_ENUMBEGINV , _DH_ENUMNEXTOBJECT , _DH_ENUMNEXTVARIANT , _DH_TOGGLEEXCEPTIONS

will be used exactly like @disphpr:func( params... )
so @disphpr:dhCreateObject( params ..... ) will be _dh_CreateObject( params ..... )

>Old Syntax does not work ?
still work but you need to keep the disphrp.dll
Hallo Jimmy,

hast du mal Beispiele mit Word und / oder Excel und der ot4xb - ActiveX Schnittstelle ?
Ist die wirklich schneller als die standardmäßig eingebaute ?

Re: COM-DLL ohne Registrierung nutzen ?

Verfasst: So, 09. Mär 2014 14:02
von AUGE_OHR
brandelh hat geschrieben:hast du mal Beispiele mit Word und / oder Excel und der ot4xb - ActiveX Schnittstelle ?
Ist die wirklich schneller als die standardmäßig eingebaute ?
Nein ... das lohnte nicht bei den "kleinen" Mengen ... aber mit Outlook und Mappoint ;)

obwohl man mit DispHPR activeX ansprechen kann muss man die Einschränkung machen das es nur funktioniert wenn man ein "Fenster" hat
d.h. WMP, was als Overlay oder DirectX läuft, kann man damit zwar ansprechen aber es kommt "nichts zurück".

DispHPR ist also "nur" ein Ersatz für CreateObject() und nicht für XbpActiveXControl()

p.s. Geschwindigkeit : je nach Einsatzzweck Faktor 5 - 40x schneller als Xbase++

Re: COM-DLL ohne Registrierung nutzen ?

Verfasst: Mo, 31. Mär 2014 14:22
von andreas
Hallo Hubert,

es gibt eine Möglichkeit die ActiveX-OCX/DLL über Manifest einzubinden, so dass die Installation bzw. Registrierung nicht mehr notwendig ist.
Ich weiß nicht, wie man den Manifesteintrag manuell erstellen könnte.
Ich mache es immer mit MS Visual Studio C# (die kostenlose Version sollte reichen):
- Projekt erstellen.
- Verweis auf das notwendige ActiveX hinzufügen.
- Eigenschaften des Verweises aufrufen
- "Isoliert" auf TRUE setzen.
- Projekt kompilieren.

In der erzeugten Manifest-Datei findest du einen Bereich "<file name ... </file>" den du in deine Manifestdatei einfügen kannst:

Code: Alles auswählen

<?xml version="1.0" encoding="utf-8"?>
<assembly xsi:schemaLocation="urn:schemas-microsoft-com:asm.v1 assembly.adaptive.xsd" manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:asmv1="urn:schemas-microsoft-com:asm.v1" xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:asmv3="urn:schemas-microsoft-com:asm.v3" xmlns:dsig="http://www.w3.org/2000/09/xmldsig#" xmlns:co.v1="urn:schemas-microsoft-com:clickonce.v1" xmlns:co.v2="urn:schemas-microsoft-com:clickonce.v2">
  <assemblyIdentity name="WinOCXManifest.exe" version="1.0.0.0" type="win32" />
  <file name="richtx32.ocx" asmv2:size="260096">
    <hash xmlns="urn:schemas-microsoft-com:asm.v2">
      <dsig:Transforms>
        <dsig:Transform Algorithm="urn:schemas-microsoft-com:HashTransforms.Identity" />
      </dsig:Transforms>
      <dsig:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha256" />
      <dsig:DigestValue>mw6kQq+efi3RmgCf4N0kR+niGDWtmCAfZ3wwj+m/z3o=</dsig:DigestValue>
    </hash>
    <typelib tlbid="{3b7c8863-d78f-101b-b9b5-04021c009402}" version="1.2" helpdir="C:\Windows\HELP\RTFBox98.CHM" resourceid="0" flags="CONTROL,HASDISKIMAGE" />
    <comClass clsid="{3b7c8860-d78f-101b-b9b5-04021c009402}" threadingModel="Apartment" tlbid="{3b7c8863-d78f-101b-b9b5-04021c009402}" progid="RICHTEXT.RichtextCtrl.1" description="Microsoft Rich Textbox Control 6.0 (SP4)" />
  </file>
</assembly>
Dieser generierter Code für die Manifestdatei ersetzt die Windows-Registrierung. Die für das Projekt benötigte ActiveX-Dateien liegen dann auch im VS-Verzeichnis, die du in deinen Projektverzeichnis übernehmen kannst.

Re: COM-DLL ohne Registrierung nutzen ?

Verfasst: Di, 01. Apr 2014 7:37
von georg
Hallo, Andreas -


das ist ja mal ein ganz wertvoller Hinweis! Danke dafür!

Re: COM-DLL ohne Registrierung nutzen ?

Verfasst: Do, 03. Apr 2014 12:03
von andreas
Ich habe meine Beschreibung angepasst und in Wissensbasis gepostet.