DLLファイルの暗黙的リンクについて

解決済みの質問

DLLファイルの暗黙的リンクについて

環境: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

QNo.5764733

すぐに回答ほしいです

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

>※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

ANo.1

4人が「このQ&Aが役に立った」と投票しています

[  前へ  |  次へ ]

ベストアンサー以外の回答(1件中 1~1件目)

ANo.2

むぅ、申し訳ない。

openじゃない方(有料)の
古いSSLライブラリ類を参照していたようです。

opensslだと、rsa.hでした。
~~~(ノ≧ロ)ノヒィィィィ~

投稿日時 - 2010-04-05 01:06:35

お礼

有料SSLがあるんですね、知りませんでした^^;
イロイロ助言、ありがとうございました。

投稿日時 - 2010-04-05 09:55:33

あわせてチェックしたい
  • OpenSSL関数エラーについて ...
  • openssl ...
  • VB.netでのVC++呼び出し引数の順番 ...
PR

OKWaveのオススメ

教えて弁護士さん!

お金の悩みQ&A特集はこちら