電子書籍の厳選無料作品が豊富!

こんにちわ
JavaからC++のプログラムを呼び出し、ハードウェアを動かすプログラムを開発しているんですが
Javaでプログラムを起動し、C++を呼び出して終了すると
Javaプログラムと同一ディレクトリ内にlogファイルが生成され、困っております。

インターネットで調べたところ、JavaVMのエラーまたはレジストリのエラー
ということがぼんやりわかった程度で、解決策が見つけ出せずにおります。

インターネットでインストールをしなおすと直るとあったので
Javaのインストールをやり直してみたり、logファイルを和訳してみたりしましたが
状況が変わらないためご相談させて頂きます。
どなたかおわかりになる方、少しの情報でもかまいませんので
ご回答宜しくお願い致します。


eclipseコンソール上のエラー文です。logファイルについては文字数制限のためオーバしてしまいました。
内容↓

#
# A fatal error has been detected by the Java Runtime Environment:
#
# EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x06722cd2, pid=5572, tid=4244
#
# JRE version: 7.0_05-b05
# Java VM: Java HotSpot(TM) Client VM (23.1-b03 mixed mode, sharing windows-x86 )
# Problematic frame:
# C [PCardRW32.dll+0x22cd2] crwSetLineControl+0x203b2
#
# Failed to write core dump. Minidumps are not enabled by default on client versions of Windows
#
# An error report file with more information is saved as:
# C:\eclipse\workspace\ReWriteCard\hs_err_pid5572.log
#
# If you would like to submit a bug report, please visit:
# http://bugreport.sun.com/bugreport/crash.jsp
#

A 回答 (3件)

JavaVMやレジストリを疑う前に自分らで作った部分を疑うべきだと思うんですが。



># Problematic frame:
># C [PCardRW32.dll+0x22cd2] crwSetLineControl+0x203b2

PCardRW32.dllに何か見覚えありませんか?

私も最近JNIやってますけど、JavaVMがクラッシュするのはたいてい自分たちが作った部分に問題があるのが原因ですよ。

この回答への補足

ご回答ありがとうございます
PCardRW32.dllの
crwSetLineControl関数は他業者さんが提供されている関数でして
crwSetLineControl関数もプログラムの中では記述してないので
何だろうと思ってはいたんですが、やはりこれが原因の可能性が高いのでしょうか

補足日時:2012/06/19 21:55
    • good
    • 0

>ですが、プログラムではcrwSetLineControlは記述してないので


>別の関数がcrwSetLineControlを呼び出しているかもしれないので
>そこを調べてみます

あまりcrwSetLineControlに固執しないでくださいね。

># C [PCardRW32.dll+0x22cd2] crwSetLineControl+0x203b2

は、crwSetLineControlのアドレスから+0x203b2の所というだけでcrwSetLineControl関数内とは限りませんので(その場所を表現するのに一番近くのシンボルがcrwSetLineControlだったという事です)

また転記できなかったログの中にはスタックトレースもあると思いますので活用されるとよいかと思います。
    • good
    • 0
この回答へのお礼

お世話になっております。

しばらく調べさせていただき、わかったことは
・BSTRの操作は無関係
・他社製dllのメモリアクセス違反
ということです。
dllを開発された企業に問合せを行ったところ、
Javaには対応していないのでわかりかねる。
との回答を頂き、これ以上良くなることはないかと考えております。
どこで何がアクセス違反を起こしているのかは、今後調べて参りますが
大変難しい作業であると思います。

お忙しい中ご回答頂きまして、大変ありがとうございました。
これに懲りず、また質問させて頂きますので
今後共宜しくお願い致します。

お礼日時:2012/08/03 14:28

それが原因なのかもしれないし、


それの使い方が悪いのかもしれないし
それは調べてみないとわかりません。

エラーが起きてるところが原因とは限りません。

例:
strcpy(NULL, "null");

strcpyでセグメンテーションエラーが起きるはずですが、strcpyが原因だと思いますか?

この回答への補足

ご回答ありがとうございます
なるほど
そちらの例ですと、10:0で使い方が悪いですね
ですが、プログラムではcrwSetLineControlは記述してないので
別の関数がcrwSetLineControlを呼び出しているかもしれないので
そこを調べてみます
ありがとうございます。

補足日時:2012/06/20 09:01
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!