- - PR -
JNIについて
投稿者 | 投稿内容 | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2005-12-07 14:33
こんにちは。
スイマセン、記述もれしていました。 J2SDKのincludeディレクトリを指定する必要がありました。 VC++6のメニューから [ツール]-[オプション]-[ディレクトリ]-[表示するディレクトリ:インクルード ファイル] で、インクルードパスを指定することができますので、次のようにパスを指定してください。 「c:¥j2sdk1.4.1_01¥include」 「c:¥j2sdk1.4.1_01¥include¥win32」 #独り言ですが、この掲示板って円マーク”¥”を使うとおかしくなりますね。 全角の¥マークで代用してます。 | ||||||||||||||||
|
投稿日時: 2005-12-07 16:13
Tdnr_Symさん、教えてください。
インクルードパスをしたら先ほどのエラーは出なくなりましたが、 今度は下記のようなエラーが発生しました・・・。 只今調査中ですが、すぐに原因が分かるようでしたら ご指摘お願いします。 --------------------構成: VbComWrapper - Win32 Debug-------------------- コンパイル中... VbComWrapper.cpp D:\JNI\VbComWrapper.cpp(11) : error C2871: 'VbCom' : 存在しないか名前空間ではありません。 D:\JNI\VbComWrapper.cpp(43) : error C2065: '_OtherSystem' : 定義されていない識別子です。 D:\JNI\VbComWrapper.cpp(43) : error C2065: 'pOtherSystem' : 定義されていない識別子です。 D:\JNI\VbComWrapper.cpp(43) : error C2106: '=' : 左のオペランドが、左辺値になっていません。 D:\JNI\VbComWrapper.cpp(44) : error C2065: 'OtherSystem' : 定義されていない識別子です。 D:\JNI\VbComWrapper.cpp(66) : error C2059: 構文エラー : ')' D:\JNI\VbComWrapper.cpp(71) : error C2227: '->Release' : 左側がクラス、構造体、共用体へのポインタではありません。 D:\JNI\VbComWrapper.cpp(86) : error C2059: 構文エラー : ')' D:\JNI\VbComWrapper.cpp(91) : error C2227: '->GetData' : 左側がクラス、構造体、共用体へのポインタではありません。 D:\JNI\VbComWrapper.cpp(107) : error C2059: 構文エラー : ')' D:\JNI\VbComWrapper.cpp(113) : error C2227: '->SendData' : 左側がクラス、構造体、共用体へのポインタではありません。 cl.exe の実行エラー VbComWrapper.exe - エラー 11、警告 0 | ||||||||||||||||
|
投稿日時: 2005-12-07 16:39
こんにちは。
エラー内容からすると #import "VbCom.dll" のVbCom.dllが見つからないわけではなさそうですね。 ビルドで出力されたファイルの中に(DebugフォルダかReleaseフォルダ内です) ".tlhファイル"と".tliファイル"がありませんか? なければ、次の1行以外をコメントアウトして、ビルドしてみてください。 .tlh/.tliが生成されるはずです。 VbCom.tlhファイルの内容
VbCom.tlhがあれば、その中をエディタでのぞいてみてください。 だいたい次のようなコードではありませんか? 細かいところは違うはすですが…
解決しないようであれば、".tlhファイル"の内容を 書き込んでいただけると助かります。 あと、気になったのですが
「Win32 Application(.exe)」として、プロジェクトを新規作成しませんでしたか? 「Win32 Dynamic-Link Library(.dll)」としてプロジェクトを新規作成するようにしてください。 | ||||||||||||||||
|
投稿日時: 2005-12-07 18:36
Tdnr_Symさん、回答ありがとうございます。
先ほどのコンパイルエラーは namespace を間違えていました。 コンパイルは無事通ったのですが、ビルド時に下記のエラーが 発生しました。 何かの紐付きがうまくいっていないような気がするのですが、 原因分かりますか? --------------------構成: VbComWrapper - Win32 Debug-------------------- リンク中... ライブラリ Debug/VbComWrapper.lib とオブジェクト Debug/VbComWrapper.exp を作成中 LIBCD.lib(crt0.obj) : error LNK2001: 外部シンボル "_main" は未解決です Debug/VbComWrapper.exe : fatal error LNK1120: 外部参照 1 が未解決です。 link.exe の実行エラー VbComWrapper.exe - エラー 2、警告 0 | ||||||||||||||||
|
投稿日時: 2005-12-07 18:44
こんばんは。
えーと、どうも"Win32 Console Application"でプロジェクトを新規作成してしまったようですね。 ↓お手数ですけれども、もう一度プロジェクトを作り直してもらえますか?
#あともう少しだと思いますので、頑張ってください(*^_^*) | ||||||||||||||||
|
投稿日時: 2005-12-07 19:36
Tdnr_Symさんありがとうございます。
ビルドが通り正常に実行されました!! ここまで来るのに1日かかってしまいましたが、 今日1日お付き合いしていただいて 本当にありがとうございました。 質問なんですが、DLLがCOMに登録されているかどうかは 何を見れば分かるのでしょうか? 開発サーバ等で実行する場合は、 VbCom.dllをCOMに登録しておいて、 パスの通ったところにVbComWrapper.dllを 置いておくだけで大丈夫ですか? 明日から業務用のプログラムを作成したいと思います。 明日、明後日辺りは色々つまづいてしまうかもしれないので、 もし空いている時間がありましたら、 @IT 会議室を覗いてみてください。 心から感謝しております。 ありがとうございました。 | ||||||||||||||||
|
投稿日時: 2005-12-07 19:48
こんばんは。
JNIの呼び出しには成功しているみたいですね。 おめでとうございます。 あとはCOMインスタンスの生成が問題ですね。 regsvr32コマンドでVbCom.dllを登録しましたか? COMが正しく登録できているかどうかは、 VC++6のメニューから [ツール]-[OLE/COM オブジェクト ビューア]を起動します。 "Type Libraries"フォルダの下に "VbCom"というアイテムがあれば登録できています。 あと、注意点を1つ。 VB6でVbCom.dllをビルドしなおす場合の手順ですが 1.既存のVbCom.dllの登録を解除しておきます。 regsvr32 /u VbCom.dll 2.VB6でVbCom.dllを作成します。 3.新たに作成したVbCom.dllを登録しなおします。 regsvr32 VbCom.dll 4.新たに作成したVbCom.dllをVC++6のプロジェクトフォルダにコピーし リビルドを実行しVbComWrapper.dllを作成しなおします。 5.新たに作成したVbComWrapper.dllをjavaのパスの通ったところにコピーします。 6.javaで実行します。 もし、"CoCreateInstance failed!!"という、いつまでもメッセージが続けて インスタンスの生成に失敗しているようでしたら、 上記の手順を最初から、行ってみてください。 | ||||||||||||||||
|
投稿日時: 2005-12-07 20:14
こんばんは。
あれ、うまくビルド・実行できたんですね。 おめでとうございます! 今日1日このことが気になって掲示板に張り付いておりました。
先の書き込みのとおり「OLE/COM オブジェクト ビューア」というツールを使えば分かります。
サーバー側に、すべて VbCom.dll(Activex dll)、VbComWrapper.dll(JNI)、OtherSystem.class(Javaラッパークラス) を置くんですよね。大丈夫だと思いますが。
業務用プログラムの作成、頑張ってください。 私もできるだけ、ご相談に応じられるようにしたいと思います。 |