- ベストアンサー
※ 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関数が表示されます。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
uplink.c を読んでみましたが、 おそらくは直前の GetModuleHandle(NULL) によって DLL の呼び出し元の方が関数の検索対象になっているのですね。 ここを DLL 名に変えてコンパイルし直せば大丈夫かもしれませんが……。 また、ドキュメントを検索したところ以下のようなやり取りが見つかりました。 たぶん、FILE* を引数に取る関数を避けて IO 周りを自分で実装するように、 ということだと思いますが、結構な手間が掛かると思います。 もし速度がそれほど重要な局面でなければ、 DLL からコマンドを呼び出すようにした方が楽で無難かもしれません。
その他の回答 (1)
- norachlo
- ベストアンサー率100% (10/10)
回答No.1
openssl/applink.c をインクルードしてもその現象は見られますか?
質問者
補足
回答ありがとうございます。 openssl/applink.cはインクルードしています。 コンソール用に作成した(__declspec(dllexport)をはずしたり)ものなら動作するんです;
お礼
よくよく調べたらGetModuleHandle(NULL)は起動プロセスのハンドルを返すのでやはりVBAからでは無理そうでした。 DLL → EXE → DLLの形でもいけそうです。 (実際にやってないので断言はできませんが^^;) ソースを変更して再コンパイルが一番妥当だと思いました。 ありがとうございました。
補足
>おそらくは直前の GetModuleHandle(NULL) によって >DLL の呼び出し元の方が関数の検索対象になっているのですね。 >ここを DLL 名に変えてコンパイルし直せば大丈夫かもしれませんが……。 ExcelVBA側でOPENSSL_Applink関数が利用できる状態(Declare Function ~)にしてみたのですが ダメだったのでやはり再コンパイルするしか無いんでしょうね^^; >また、ドキュメントを検索したところ以下のようなやり取りが見つかりました。 >たぶん、FILE* を引数に取る関数を避けて IO 周りを自分で実装するように、 >ということだと思いますが、結構な手間が掛かると思います。 あまり時間が無いので後回しにさせていただきます; >もし速度がそれほど重要な局面でなければ、 >DLL からコマンドを呼び出すようにした方が楽で無難かもしれません。 これも考えたのですが、クライアント側にOpenSSLのインストールができないため断念しました。 再コンパイルでがんばってみます。