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

解決


jun039  2009-10-26 08:43:35  No: 102039  IP: [192.*.*.*]

*.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 14:19:12  No: 102040  IP: [192.*.*.*]

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

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

編集 削除
オショウ  2009-10-26 14:35:45  No: 102041  IP: [192.*.*.*]

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

そてもVB6で?

編集 削除
Jun039  2009-10-26 19:30:43  No: 102042  IP: [192.*.*.*]

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

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

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

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

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

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

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

編集 削除