質問: opensslでopenssl_applinkが見つからない。 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関数が表示されます。 (序数ではなく、_openssl_applinkで表示されます。) 原因がわかる方いらっしゃいますでしょうか? よろしくお願い致します。 os:windowsxp openssl:0.9.8.h excel:2002
回答: uplink.c を読んでみましたが、 おそらくは直前の getmodulehandle(null) によって dll の呼び出し元の方が関数の検索対象になっているのですね。 ここを dll 名に変えてコンパイルし直せば大丈夫かもしれませんが......。 また、ドキュメントを検索したところ以下のようなやり取りが見つかりました。 たぶん、file* を引数に取る関数を避けて io 周りを自分で実装するように、 ということだと思いますが、結構な手間が掛かると思います。 もし速度がそれほど重要な局面でなければ、 dll からコマンドを呼び出すようにした方が楽で無難かもしれません。 参考url:http://archive.netbsd.se/?ml=openssl-dev&a=2005-12&t=1552483