解決済みの質問
環境:WindowsXP VC2005
OpenSSLのRSA構造体を暗黙的リンクしようとしているのですが、
やり方がわかりません。
OpenSSLの関数群で、RSA構造体が使用されているのですが、
RSA構造体をdllimport出来ないので、失敗してしまいます。
[フォーマット]
(例)main.c
int main(void)
{
__declspec(dllimport) RSA* 関数名(引数);
※RSA構造体をdllimportしていないため、エラーが発生。
}
構造体をdllimportする方法をご存知の方がいらっしゃいましたら、
お願いします。
投稿日時 - 2010-03-19 21:37:07
>※RSA構造体をdllimportしていないため、エラーが発生。
という解釈が間違っています。
未定義のユーザ定義型※1を使用したためのコンパイルエラーがエラー原因だと思われます。
※1ユーザ定義型とは、typedefで宣言した型のこと。「ワシの知らんデータ型を使っちょるが、typedef宣言が見当たらんぞ!!」とコンパイラ親爺がお怒りです。
解決方法ですが、
本当にopensslライブラリを利用するつもりなら、
ssl.hヘッダファイルを#include宣言して下さい。
RSAユーザ定義型は、ssl.hヘッダファイル中、
typedef struct rsa_st RSA;
と宣言されています。
なお、コンパイラを誤魔化すだけなら、他の手段もあります。
しかし、opensslライブラリを利用するなら、#include宣言が必須。
最後に、今後の勉強も兼ねて、解釈の誤りを指摘します。
誤り1.
"RSA*"は、RSAユーザ定義型のポインタ型です。RSA構造体のポインタ型ではありません。
RSA構造体のポインタ型は、あえて記述すると"struct RSA*" です。実際は、"struct rsa_st"なのでハズレですが。
誤り2.
データ型定義(や構造体定義)は、#include宣言 じゃないと、インポートできません。
dllimport宣言ができるのは、DLLから関数ポインタを取得することだけです。
投稿日時 - 2010-03-23 02:47:33
補足
> RSAユーザ定義型は、ssl.hヘッダファイル中、
> typedef struct rsa_st RSA;
> と宣言されています。
ありませんでした><。
OpenSSLバージョンは何ですか?
私はOpenSSL v0.9.8mです。
あと、今後の勉強も兼ねて~のコメントありがとうございます。
大変ありがたいです。このご指摘のおかげで、
rsa.hを読み込むことが出来ました。
投稿日時 - 2010-03-25 22:30:15
4人が「このQ&Aが役に立った」と投票しています
OKWaveのオススメ
おすすめリンク