• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:OpenSSLでOPENSSL_Applinkが見つからない。)

OpenSSLでOPENSSL_Applinkが見つからない

このQ&Aのポイント
  • WindowsXPでOpenSSL(ver 0.9.8.h)を使用したDLLを作成しています。PEMファイルを読み込むためにPEM_read_RSA_PUBKEY、PEM_read_RSAPrivateKeyを使用したいのですが、PEM_readRSA_PUBKEY、PEM_read_RSAPrivateKey部分でOEPNSSL_Uplink(04847010,05):no OPENSSL_Applinkというエラーが出てしまいます。
  • DLLにしてExcelVBAで動作させると上のエラーが発生してしまいます。エラー箇所だと思われるソースコード(uplink.c)を見ると、applink=(void**(*)())GetProcAddress(h,'OPENSSL_Applink'); if (applink==NULL) { apphandle=(HMODULE)-1; _tcscpy (msg+len,_T('no OPENSSL_Applink')); break; } の箇所でapplinkがNULLのためエラーになってしまっているようです。
  • 原因がわかる方いらっしゃいますでしょうか?作成したDLLをコマンド[dumpbin /EXPORTS 自作DLL]で見ると実行させたい関数と、OPENSSL_Applink関数が表示されます。

質問者が選んだベストアンサー

  • ベストアンサー
  • norachlo
  • ベストアンサー率100% (10/10)
回答No.2

uplink.c を読んでみましたが、 おそらくは直前の GetModuleHandle(NULL) によって DLL の呼び出し元の方が関数の検索対象になっているのですね。 ここを DLL 名に変えてコンパイルし直せば大丈夫かもしれませんが……。 また、ドキュメントを検索したところ以下のようなやり取りが見つかりました。 たぶん、FILE* を引数に取る関数を避けて IO 周りを自分で実装するように、 ということだと思いますが、結構な手間が掛かると思います。 もし速度がそれほど重要な局面でなければ、 DLL からコマンドを呼び出すようにした方が楽で無難かもしれません。

参考URL:
http://archive.netbsd.se/?ml=openssl-dev&a=2005-12&t=1552483
sh_hirose
質問者

お礼

よくよく調べたらGetModuleHandle(NULL)は起動プロセスのハンドルを返すのでやはりVBAからでは無理そうでした。 DLL → EXE → DLLの形でもいけそうです。 (実際にやってないので断言はできませんが^^;) ソースを変更して再コンパイルが一番妥当だと思いました。 ありがとうございました。

sh_hirose
質問者

補足

>おそらくは直前の GetModuleHandle(NULL) によって >DLL の呼び出し元の方が関数の検索対象になっているのですね。 >ここを DLL 名に変えてコンパイルし直せば大丈夫かもしれませんが……。 ExcelVBA側でOPENSSL_Applink関数が利用できる状態(Declare Function ~)にしてみたのですが ダメだったのでやはり再コンパイルするしか無いんでしょうね^^; >また、ドキュメントを検索したところ以下のようなやり取りが見つかりました。 >たぶん、FILE* を引数に取る関数を避けて IO 周りを自分で実装するように、 >ということだと思いますが、結構な手間が掛かると思います。 あまり時間が無いので後回しにさせていただきます; >もし速度がそれほど重要な局面でなければ、 >DLL からコマンドを呼び出すようにした方が楽で無難かもしれません。 これも考えたのですが、クライアント側にOpenSSLのインストールができないため断念しました。 再コンパイルでがんばってみます。

その他の回答 (1)

  • norachlo
  • ベストアンサー率100% (10/10)
回答No.1

openssl/applink.c をインクルードしてもその現象は見られますか?

sh_hirose
質問者

補足

回答ありがとうございます。 openssl/applink.cはインクルードしています。 コンソール用に作成した(__declspec(dllexport)をはずしたり)ものなら動作するんです;

関連するQ&A