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
No.2ベストアンサー
- 回答日時:
uplink.c を読んでみましたが、
おそらくは直前の GetModuleHandle(NULL) によって
DLL の呼び出し元の方が関数の検索対象になっているのですね。
ここを DLL 名に変えてコンパイルし直せば大丈夫かもしれませんが……。
また、ドキュメントを検索したところ以下のようなやり取りが見つかりました。
たぶん、FILE* を引数に取る関数を避けて IO 周りを自分で実装するように、
ということだと思いますが、結構な手間が掛かると思います。
もし速度がそれほど重要な局面でなければ、
DLL からコマンドを呼び出すようにした方が楽で無難かもしれません。
参考URL:http://archive.netbsd.se/?ml=openssl-dev&a=2005- …
この回答への補足
>おそらくは直前の GetModuleHandle(NULL) によって
>DLL の呼び出し元の方が関数の検索対象になっているのですね。
>ここを DLL 名に変えてコンパイルし直せば大丈夫かもしれませんが……。
ExcelVBA側でOPENSSL_Applink関数が利用できる状態(Declare Function ~)にしてみたのですが
ダメだったのでやはり再コンパイルするしか無いんでしょうね^^;
>また、ドキュメントを検索したところ以下のようなやり取りが見つかりました。
>たぶん、FILE* を引数に取る関数を避けて IO 周りを自分で実装するように、
>ということだと思いますが、結構な手間が掛かると思います。
あまり時間が無いので後回しにさせていただきます;
>もし速度がそれほど重要な局面でなければ、
>DLL からコマンドを呼び出すようにした方が楽で無難かもしれません。
これも考えたのですが、クライアント側にOpenSSLのインストールができないため断念しました。
再コンパイルでがんばってみます。
よくよく調べたらGetModuleHandle(NULL)は起動プロセスのハンドルを返すのでやはりVBAからでは無理そうでした。
DLL → EXE → DLLの形でもいけそうです。
(実際にやってないので断言はできませんが^^;)
ソースを変更して再コンパイルが一番妥当だと思いました。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PostgreSQL PostgreSQL14.6のSSL対応について 1 2023/01/05 15:42
- その他(プログラミング・Web制作) IT初心者です 仕事で、vb.netで作成されたdllをvbaで呼び出すプログラムを作成しろと言われ 1 2023/03/27 08:22
- PHP バージョン情報の取得方法について 1 2023/03/15 11:56
- Windows 10 IT初心者です! powershellで以下のようなエラーが出ました オブジェクト参照がオブジェクト 1 2023/05/17 11:30
- FX・外国為替取引 MQL5にて謎のエラーが発生!だれか対処を教えてください! 1 2023/03/25 15:59
- その他(プログラミング・Web制作) pythonでクラスで複数のメソッドを利用する方法 2 2022/04/15 04:17
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- Access(アクセス) アクセス where句を使用して複数条件抽出をするには 2 2022/08/29 13:24
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- フリーソフト cygewf-2.dllがない、と表示され、ダウンロードしたファイルが動作しない 2 2023/03/27 11:05
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
python エラー
-
エクセルのエラーメッセージ「4...
-
C2146を回避するにはどうしたら...
-
win32api構造体引数の型指定に...
-
visual C++ でaruduinoとシリア...
-
レコードセットをcloseする所で...
-
適切な変換関数が存在しない???
-
入れ子になっている構造体配列...
-
BCC・stdio.h・_stddef.hのエラー
-
visual C++ でビルドの中止がで...
-
ビルドが失敗してしまいます
-
Excelのエラーで困ってます。
-
fortranでプログラムを実行する...
-
error C2143: 構文エラー の対処法
-
配列の初期化時に出たエラーの...
-
Visual Studioのstrcpy_sについて
-
Cabの解凍プログラム
-
Fortran コンパイルエラーについて
-
ビルド失敗 指定されたファイ...
-
不正なメモリ領域へのアクセス...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
python エラー
-
エクセルのエラーメッセージ「4...
-
適切な変換関数が存在しない???
-
Excelのエラーで困ってます。
-
バッチからsqlplusの接続エラー...
-
fortranでプログラムを実行する...
-
HEWを使用しているのですが、こ...
-
コンパイルできません。
-
デバッグ中のエラーのことで教...
-
visual C++ でビルドの中止がで...
-
BC30002: 型 'ListItem' が定義...
-
Handlesについて
-
sys/time.hのインクルードがで...
-
ビルド失敗 指定されたファイ...
-
VB2008で定数に色の設定をした...
-
RightとLeft関数のライブ...
-
multiple definitionというエラー
-
WindowsからLinuxへの移植
-
HANDLEの宣言でのエラー
-
レコードセットをcloseする所で...
おすすめ情報