- ベストアンサー
DLLファイルの暗黙的リンクについて
- OpenSSLのRSA構造体を暗黙的リンクする方法を知りたい
- OpenSSLの関数群でRSA構造体が使用されているが、dllimportできないためエラーが発生する
- RSA構造体をdllimportする方法を教えてほしい
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
>※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から関数ポインタを取得することだけです。
その他の回答 (1)
- onosuke
- ベストアンサー率67% (310/456)
むぅ、申し訳ない。 openじゃない方(有料)の 古いSSLライブラリ類を参照していたようです。 opensslだと、rsa.hでした。 ~~~(ノ≧ロ)ノヒィィィィ~
お礼
有料SSLがあるんですね、知りませんでした^^; イロイロ助言、ありがとうございました。
補足
> RSAユーザ定義型は、ssl.hヘッダファイル中、 > typedef struct rsa_st RSA; > と宣言されています。 ありませんでした><。 OpenSSLバージョンは何ですか? 私はOpenSSL v0.9.8mです。 あと、今後の勉強も兼ねて~のコメントありがとうございます。 大変ありがたいです。このご指摘のおかげで、 rsa.hを読み込むことが出来ました。