Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

OLB Datei registrieren

390 views
Skip to first unread message

Manuel Kobloch

unread,
May 7, 2010, 3:22:18 AM5/7/10
to
Hallo,

ich suche eine M�glichkeit OLB Dateien wie die ""C:\Program Files
(x86)\Microsoft Office\Office12\MSACC.OLB" per C# Code zu registrieren. F�r
OCX und DLL Dateien mache ich das �ber einen neuen Prozessaufruf der
regsvr32.exe im silent Modus. Ich habe da zwar nicht hin bekommen,
abzugreifen, ob der Vorgang erfolgreich war, aber damit k�nnte ich leben.

Mit der regsvr32.exe kann man jedoch keine OLB Dateien registrieren. Jetzt
habe ich gegoogelt wie ein Wilder und fand tats�chlich auch einen Blog
Eintrag
(http://www.zorched.net/2009/01/01/register-and-unregister-com-dll-from-net-code/),
doch dieser funktionierte nicht mal bei einer normalen DLL Datei, z.B. der
"C:\Program Files (x86)\Common Files\microsoft shared\DAO\dao360.dll".

Hatte schon mal jemand das selbe Problem und hat eine L�sung gefunden?

Wie immer bin ich f�r jede Hilfe sehr dankbar.

Gr��e

Manu

G�nter Prossliner

unread,
May 7, 2010, 5:01:14 AM5/7/10
to
Hallo Manuel!

> ich suche eine M�glichkeit OLB Dateien wie die ""C:\Program Files
> (x86)\Microsoft Office\Office12\MSACC.OLB" per C# Code zu
> registrieren. F�r OCX und DLL Dateien mache ich das �ber einen neuen
> Prozessaufruf der regsvr32.exe im silent Modus.

regtlib.exe


mfg GP


Manuel Kobloch

unread,
May 7, 2010, 5:44:30 AM5/7/10
to
Auf die Datei bin ich auch schon gesto�en. Jedoch befindet sie sich nicht
auf einer Standard Installation von Win7 oder WinVista (mehr habe ich noch
nicht getestet) und sie extra mit dem Setup auszuliefern w�re oversized.


"G�nter Prossliner" <nos...@spam.com> schrieb im Newsbeitrag
news:#qoYaPc7...@TK2MSFTNGP06.phx.gbl...

G�nter Prossliner

unread,
May 7, 2010, 6:04:49 AM5/7/10
to
Hallo Manuel!

> Auf die Datei bin ich auch schon gesto�en. Jedoch befindet sie sich
> nicht auf einer Standard Installation von Win7 oder WinVista (mehr
> habe ich noch nicht getestet) und sie extra mit dem Setup
> auszuliefern w�re oversized.

Mittels depends.exe sieht man, dass regtlib.exe die Funktion
"RegisterTypeLib" aus der OLEAUT32.dll importiert.

Das ist sicherlich vielversprechend!

[RegisterTypeLib]
http://msdn.microsoft.com/en-us/library/ms221570(VS.90).aspx

[RegisterTypeLibForUser]
http://msdn.microsoft.com/en-us/library/ms221504(VS.90).aspx

[pinvoke.net: RegisterTypeLib (oleaut32)]
http://www.pinvoke.net/default.aspx/oleaut32/RegisterTypeLib.html


OK?
mfg GP


Manuel Kobloch

unread,
May 7, 2010, 7:38:30 AM5/7/10
to

Vom Prinzip her, habe ich alles verstanden und das sollte auch der
L�sungsweg sein. Jedoch �berschreitet es meine F�higkeiten es in c#
umzusetzen. Ich habe den Code in VB.net ausprobiert und dort funktionierte
die Registrierung der MSACC.OLB ebenfalls nicht. Da ich mit Zugriff auf APIs
absolut unerfahren bin, mache ich es mir schwer den Fehler zu ermitteln.

"G�nter Prossliner" <nos...@spam.com> schrieb im Newsbeitrag

news:O0UZ8yc7...@TK2MSFTNGP06.phx.gbl...

G�nter Prossliner

unread,
May 7, 2010, 9:44:16 AM5/7/10
to
Hallo Manuel!

> Vom Prinzip her, habe ich alles verstanden und das sollte auch der
> L�sungsweg sein. Jedoch �berschreitet es meine F�higkeiten es in c#
> umzusetzen.

Du kannst auch in VB.Net machen.

> Ich habe den Code in VB.net ausprobiert und dort
> funktionierte die Registrierung der MSACC.OLB ebenfalls nicht.

Was hei�t "funktionierte nicht"?

> Da ich mit Zugriff auf APIs absolut unerfahren bin, mache ich es mir
> schwer den Fehler zu ermitteln.

Wie hast Du es denn angewendet?

Grob gesagt m�sste es so gehn (Deklarationen aus pinvoke.net und nicht
getestet):


Import System.Runtime.InteropServices.ComTypes
Import System.Runtime.InteropServices
Declare Unicode Function RegisterTypeLib Lib "oleaut32.dll" (ByVal ptlib As
System.Runtime.InteropServices.ComTypes.ITypeLib, ByVal szFullPath As
String, ByVal szHelpDir As String) As Integer

Declare Unicode Function LoadTypeLib Lib "oleaut32.dll" (ByVal szFile As
String, ByRef TPpTypeLib As
System.Runtime.InteropServices.ComTypes.ITypeLib) As Integer

string libPath = ".....\xxx.tlb";

Dim typeLib as ITypeLib
LoadTypeLib(libPath, ByRef typLib)
RegisterTypeLib(typeLib, libPath, null)

OK?
mfg GP


Manuel Kobloch

unread,
May 7, 2010, 11:10:59 AM5/7/10
to
Ich werde hier heute Abend noch einen Beispiel Quellcode reinschreiben.
Gerade ist es bei mir schlecht.

"G�nter Prossliner" <nos...@spam.com> schrieb im Newsbeitrag

news:uHAykte7...@TK2MSFTNGP06.phx.gbl...

Manuel Kobloch

unread,
May 9, 2010, 12:08:56 PM5/9/10
to
Ich verwendete folgenden Code:

Private Declare Unicode Function LoadTypeLib Lib "oleaut32.dll" (ByVal
TLpszModule As String, ByRef TPpTypeLib As ComTypes.ITypeLib2) As Integer
Private Declare Unicode Function RegisterTypeLib Lib "oleaut32.dll"
(ByVal ptlib As ComTypes.ITypeLib2, ByVal szFullPath As String, ByVal

szHelpDir As String) As Integer

Private Declare Unicode Function UnRegisterTypeLib Lib "oleaut32.dll"
(ByRef LibID As System.Guid, ByVal nVerMajor As Short, ByVal nVerMinor As
Short, ByVal lCID As Integer, ByVal tSysKind As ComTypes.SYSKIND) As Integer

Private Const ERROR_SUCCESS As Short = 0

Public Function RegisterTLib(ByVal strFile As String, ByVal bRegister As
Boolean) As Boolean
Dim nResult As Integer
Dim TLB As ComTypes.ITypeLib2 = Nothing
Dim tlbAttrPtr As IntPtr
Dim tlbAttr As ComTypes.TYPELIBATTR

On Error Resume Next

If My.Computer.FileSystem.FileExists(strFile) = False Then
RegisterTLib = False
Else
nResult = LoadTypeLib(strFile, TLB)

If nResult = ERROR_SUCCESS Then '<---------- Stelle markiert
If bRegister Then
nResult = RegisterTypeLib(TLB, strFile, Nothing)

If nResult = ERROR_SUCCESS Then 'success
RegisterTLib = True
Else 'failure
RegisterTLib = False
End If
Else
TLB.GetLibAttr(tlbAttrPtr)
tlbAttr = CType(Marshal.PtrToStructure(tlbAttrPtr,
GetType(ComTypes.TYPELIBATTR)), ComTypes.TYPELIBATTR)

nResult = UnRegisterTypeLib(tlbAttr.guid,
tlbAttr.wMajorVerNum, tlbAttr.wMinorVerNum, tlbAttr.lcid, tlbAttr.syskind)
tlbAttr = Nothing
TLB.ReleaseTLibAttr(tlbAttrPtr)

If nResult = ERROR_SUCCESS Then 'success
RegisterTLib = True
Else 'failure
RegisterTLib = False
End If
End If
Else ' error loading the TypeLibrary file
RegisterTLib = False
End If
End If
End Function

An der markierten Stelle bekommt die Methode nResult = -2147319780 zur�ck,
weshalb RegisterTLib = False zur�ckgibt.

Gr��e

Manuel


"G�nter Prossliner" <nos...@spam.com> schrieb im Newsbeitrag

news:uHAykte7...@TK2MSFTNGP06.phx.gbl...

G�nter Prossliner

unread,
May 10, 2010, 9:22:05 AM5/10/10
to
Hallo Manuel!

> An der markierten Stelle bekommt die Methode nResult = -2147319780
> zur�ck, weshalb RegisterTLib = False zur�ckgibt.

-2147319780 (8002801C) ist offensichtlich ein "beliebter" Code bei COM
Registrierungen:

[8002801C - Google-Suche]
http://www.google.at/search?q=8002801C


Deshalb folgende Fragen:
* funktioniert denn die Registrierung (versuchshalber) mit regtlib.exe?
* um welche .olb handelt es sich? Microsoft? Office?


mfg GP


0 new messages