*.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を比較しましたが、同じでした)
こういった場合どういうことが想定されるのでしょうか?
>こういった場合どういうことが想定されるのでしょうか?
>
そもそも何てエラーだったんですか?
APIが失敗したのならGetLastError、FormatMessageなどを使用してエラー
を調べてください。
GetOpenFileNameでうまく行くならカレントディレクトリをファイルのあるデ
ィレクトリに変更するとうまくいくのかも。
RegSvr32 を使わずにレジストラ行為を行おう
と言う話ですか?
そてもVB6で?
GODさん、オショウさん回答有難うございます。
>GetOpenFileNameでうまく行くならカレントディレクトリをファイルのあるデ
ィレクトリに変更するとうまくいくのかも。
ChDirでディレクトリを変更したら出来ました!
また、Error情報は
>hMod = LoadLibrary(strFilePath)
戻り値は「0」
この操作を正しく終了しました。 (0)
>lpfn = GetProcAddress(hMod, "DllRegisterServer")
指定されたプロシージャが見つかりません。 (127)
でした。
>RegSvr32 を使わずにレジストラ行為を行おう
>と言う話ですか?
はいそうです。
実行時に同一フォルダ内にあるOCXを登録しようとしています。
(はじめにあげるべきでしたね。すみません)
関係されたかた、有難うございます。
・・・・でも、なぜ【ChDir】が必要なんだろ・・・・・
ツイート | ![]() |