LoadLibraryによるocxレジストリ登録が失敗

解決


jun039  2009-10-26 17:43:35  No: 102039

*.ocxファイルをレジストリへ登録したいのですが、
なぜか失敗してしまいます。

OS:WindowsXP SP3
環境:VB6.0

<---
    'DLL(サーバー)をメモリに読み込む
    hMod = LoadLibrary(strFilePath)

    '関数の呼び出し位置(アドレス)を取得
    If blnRegister Then
        lpfn = GetProcAddress(hMod, "DllRegisterServer")
    Else
        lpfn = GetProcAddress(hMod, "DllUnregisterServer")
    End If
--->

strFilePathには存在するFile(フルパス)で指定していますが、
LoadLibraryを実行した時点で、戻りが「00」となってしまい、
GetProcAddressが正常に動作しません。

ですが、なぜか、「GetOpenFileName」関数にて同じFileを参照しなおす
とLoadLibraryが正常な戻り値を返します。
(もちろん、それぞれの場合のstrFilePathを比較しましたが、同じでした)

こういった場合どういうことが想定されるのでしょうか?


GOD  2009-10-26 23:19:12  No: 102040

>こういった場合どういうことが想定されるのでしょうか?
>
そもそも何てエラーだったんですか?
APIが失敗したのならGetLastError、FormatMessageなどを使用してエラー
を調べてください。

GetOpenFileNameでうまく行くならカレントディレクトリをファイルのあるデ
ィレクトリに変更するとうまくいくのかも。


オショウ  2009-10-26 23:35:45  No: 102041

RegSvr32 を使わずにレジストラ行為を行おう
と言う話ですか?

そてもVB6で?


Jun039  2009-10-27 04:30:43  No: 102042

GODさん、オショウさん回答有難うございます。

>GetOpenFileNameでうまく行くならカレントディレクトリをファイルのあるデ
ィレクトリに変更するとうまくいくのかも。

ChDirでディレクトリを変更したら出来ました!

また、Error情報は
>hMod = LoadLibrary(strFilePath)
    戻り値は「0」
    この操作を正しく終了しました。 (0)
>lpfn = GetProcAddress(hMod, "DllRegisterServer")
    指定されたプロシージャが見つかりません。 (127)
でした。

>RegSvr32 を使わずにレジストラ行為を行おう
>と言う話ですか?
    はいそうです。
    実行時に同一フォルダ内にあるOCXを登録しようとしています。
    (はじめにあげるべきでしたね。すみません)

関係されたかた、有難うございます。

・・・・でも、なぜ【ChDir】が必要なんだろ・・・・・


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加