2011年02月28日

[java]ExCella Reports Tips(1)

備忘録的に。

ExCella Reports でparseすると以下のエラーの場合、分析するカラムが数式やマクロになっていないか、チェック。

・Cannot get a error value from a numeric formula cell Excella
・Not enough data (1) to read requested (2) bytes Excella


大量に有る場合は、それこそVBAで一括処理とかしないと無理だが
1枚や2枚な場合(初期導入などで)は全選択-コピー-形式を指定して貼り付け-値で
数式を全部消去すればよい。

posted by koteitan at 13:28| Comment(0) | TrackBack(0) | Java | このブログの読者になる | 更新情報をチェックする

2011年02月23日

[Java]gerResource()

ヽ(τωヽ)ノ モウダメポ

こんなしょうもないミスで1時間ぐら悩んだ。
恥だが、同様の問題をくらった輩のために記録
WEB-INF/classes/aaaa.prop のloadをするには


× new hoge().getClass().getClassLoader().getResourceAsStream("aaaa.prop");
○ new hoge().getClass().getResourceAsStream("aaaa.prop");

昔同じようなのでドツボにはまって調べて、作ったソースがあるし
マイソースDIRからgrepしたらちゃんと

pr.load(a.getClass().getResourceAsStream("hoge.cfg"));

とか発見してるのに、気付いてないんだぜ・・・。
注意力散漫だなぁ。ハァ。
自信満々で飛車を成りこみ、且つ王手金取り!
はっはっは、この雑魚めwww 

バシュウン! と遙か後方の馬に龍を抜かれ、(; ゚Д゚)! となるわけだよ。(即投了)
まったく。
注意力を高めるにも将棋はいいぞ。昨日夢にまででてきたからな・・その局面。

posted by koteitan at 15:41| Comment(0) | TrackBack(0) | Java | このブログの読者になる | 更新情報をチェックする

2011年01月27日

[java]javaCC

1000行も2000行もあるメソッドの分析なんて手動でやってられねぇええ!!
ていうか、こんなのメソッドじゃねぇ!
一回だけかと思ったら何回も何回も。いったいいくつあるんだ、これ。

というわけで字句解析だけでも機械化したい。
grepして数えてエクセルに田植えとか人間様がやる作業じゃない。

字句解析→コンパイラ→javaCC→時間短縮→HR上げに行ける→ヽ(゚∀゚)ノ

ということで、無い資料と格闘しながらがんばってみた。
superの解釈とかちょっと曖昧だけど、
メソッド中に
 ・呼ばれたメソッドの種類
 ・回数
 ・ifの最大深度
をソースファイルを喰わせれば出力できるように。
静的解析ツールとかにありそうな気がするがまぁ、いいわ。

追記は調べるのにつかった資料やHP、blogなど
感謝感謝でござります。

しかし、if最大深度:10とか出たときは自分のロジックを疑ったぜ・・。
ソースみたら、そこ空白行だしよ。右スクロール(全画面表示)したらでてきたけど。

YYYYYYYYYYからN----------までだからええと
YYYYYYYYYY
YYYYYYYYYN
YYYYYYYYN-
YYYYYYYN--
1+10の11と通り。
途中でelse分岐があるからその分*2で、ええと・・・
elseをgrepすると、8とかでるから、ええと、ええと・・・
N段目のelseだとΣN*2になるんかな。
(N段目までの分岐ケース合計がそこで倍加)

ほんまにテストしたんか!
アァ?( ´Д`)σ)Д`)ァゥァゥ 


続きを読む
posted by koteitan at 14:46| Comment(0) | TrackBack(0) | Java | このブログの読者になる | 更新情報をチェックする

2011年01月20日

[java]JITオフ 続編

複数指定するときは | で区切る。(shift押しながら¥キー)
所謂 or 

http://www-01.ibm.com/support/docview.wss?uid=swg21294023
Appending multiple classes and methods is allowed:
-Xjit:exclude={package/class.method|package/class.method}


メソッドシグネチャをいちいち書くのが('A`)マンドクセ
つ javap -s hoge

( ´ー`)フゥー...
posted by koteitan at 14:11| Comment(0) | TrackBack(0) | Java | このブログの読者になる | 更新情報をチェックする

2011年01月12日

[java]メソッドのトレース(Xtrace)

なんてスバラシイ機能なんだ、IBMJAVAのXtrace!

こんな具合にオプションを入れる

java -Xtrace:maximal=mt,methods=chkprof.*(),output=out.%d%t.%p.trc chkprof

methodsの部分にはトレースするクラスやメソッドをある程度ワイルドカードで指定可能
くわしくはdiagでも見てくれ。

出力されたファイルはバイナリなので、専用のツールでフォーマットする。
iptraceみたいやな。

java com.ibm.jvm.format.TraceFormat out.trc

そんなん面倒やんけ、という御仁は

java -Xtrace:print=mt,methods=chkprof.*() chkprof

こうかけば標準エラーにリダイレクトされる。

java -Xtrace:iprint=mt,methods=chkprof.*() chkprof

こうかけばインデント整形されてリダイレクトされる

これで自分で作ったメソッドが1トランザクションあたりに何回呼び出しされるか
わからない!と力説されても安心。

ナンデヤネン・・・。
posted by koteitan at 15:13| Comment(0) | TrackBack(0) | Java | このブログの読者になる | 更新情報をチェックする

2011年01月06日

[java] -Xjit

検索で来安いように、 Xjit Xjit Xjit 。3回ぐらい言っておけばおkだろう。

特定のメソッドをオフにし、且つコンパイルログを取り、コンパイル閾値を1にする場合

-Xjit:verbose={compileStart},vlog=/tmp/jit.log,count=1,exclude={method}

ややこしいんだよねぇ。

特定のメソッドの特定の最適化をオフ
-Xjit:{method}(disableInline)

くわしくはdiagと言いたいとこだが。

posted by koteitan at 19:41| Comment(0) | TrackBack(0) | Java | このブログの読者になる | 更新情報をチェックする

2010年12月24日

[Java]JITオフ

オフにしなきゃならんときはまぁ大抵が障害対応とかで、
詳しい設定とかアナウンスされるとは思うけどネ!

http://www-01.ibm.com/support/docview.wss?rs=180&uid=swg21294023#optimization

-Xjit:exclude={package/class.method(arg1arg2;)returntype}

metho*とかで省略したっていい。
coreとかjavacoreが出ているなら、Compiled_method=******* と出ているはずなので
ココをコピー

じっと JIT をオフ 。この「じっと」の感覚が大事です。

なんてな。
posted by koteitan at 16:26| Comment(0) | TrackBack(0) | Java | このブログの読者になる | 更新情報をチェックする

2010年12月01日

[java]staticではthisは使えません。ウルセー、Class名ヨコセヽ(`Д´)ノウワァァァン

表題の様なエラーに遭遇してしかたなくクラス名をリテラルで埋め込んでたりして
コピペされたあとに文句言われるとか、どうかと思う前に何とかしよう。
(主にlog4jのLogger.getLogger()とかであるお話だろう)

甲殻。降格。広角。こう書く。 ATOK調子悪いな・・。

String ClassName = new Throwable().getStackTrace()[0].getClassName();

例外を処理に使うなんてとんでもない、パフォーマンスがががががとか
言う輩が居るかもしれない。
そういう場合は、こういったコードがパフォーマンスに影響する箇所に登場する方を疑おう。
注意点はスタックフレームから取りだしているので、この処理をユーティリティ化とか言って、
別クラスに入れると、別のクラス名になってしまう点だ。
(階層が増えるから[0]じゃなく、[1]にしないと目的を達せられない)
posted by koteitan at 15:55| Comment(1) | TrackBack(0) | Java | このブログの読者になる | 更新情報をチェックする

2010年08月13日

[Java]禁じ手

・finalize()/gc()から逃げる方法

objectAは1回しかfinalizeされないことが保障されているので
finalize()内でthisをstaticフィールドなどへ逃がせば
仕様上はGCから逃げられる。
さすがに、これは見かけたことないな。

・finallyからの返却、投擲
 問答無用で上書きする。
 return値上書き、例外上書き。


 try{
return 1;
}finally{
return 2;
}
とか
 try{
reurn 1;
}finally{
throw new Exception();
}
とか
try{
throw new Exception();
}finally{
throw new ExceptionB();
}



こういうの。これはしょっちゅう見かけるなぁ。
普通の入門書では禁じ手となっているコードの
動きがわかると幸せなことがあるかもしれない。
posted by koteitan at 10:32| Comment(0) | TrackBack(0) | Java | このブログの読者になる | 更新情報をチェックする

2010年08月06日

[java]isValid()の間違った理解

JDBC4.0(Type4とは違うぞ)からConectionの活性を確認するメソッドが追加されたが、そのメソッドが神格化している。
これを使えばStaleConnectin(WASの場合)が防げると思いか。

いいか、よく聞け。スレッドなんてのはどこで割り込んでくるかわからんし、障害なんてどこで起こるかわからない。

if(!connection.isValid())
{
 stmt=connection.prepareStatement(…
 stmt.execute()


こんなコードだよな。
こうすればcatch(StaleConnectin sst){ が要らないので
リトライロジックが不要という説明があるじゃろう。
isValid()からstmt.execute()の間にDB障害が起こったらどうする?

つまり、try〜catchの従来型からは脱却できないし
JDBC4.0用の間違ったコードへ書き換えることはデグレードだ。

isValid()を使えば、例外機構を使わずにエラーが検知できるだけ。






posted by koteitan at 10:45| Comment(0) | TrackBack(0) | Java | このブログの読者になる | 更新情報をチェックする

2010年05月06日

[Java]備忘録メモ(非同期hashmapスレッド競合)

まぁ、問題は事象の説明じゃなく
サーブレットやJSPの世界はマルチスレッドだといい加減布教汁と
いう話なんだがなぁ・・。なんでこの手のバグは尽きないんだろうな。


↓以下、競合時の動きがよくわかる解説
http://d.hatena.ne.jp/cero-t/20091126/1259254839
http://d.hatena.ne.jp/ihiroky/20090214/1234614779


posted by koteitan at 11:09| Comment(0) | TrackBack(0) | Java | このブログの読者になる | 更新情報をチェックする

2010年04月16日

[Java]同期問題

スレッドプログラミングは難しいんだよ。
2つ以上が同時に動く状態が想像できなきゃならん。

入門書とかに書いてあるように
Collections.synchronized***()ってやれば安心なコードのいかに多いことか。

同期しなければならない範囲の見極めってすごい重要で

同期処理A
Aの結果で判断
同期処理B

こういう処理の場合、全体を同期しなきゃならん。
Aの後に割り込まれ、Aの結果が変わることはあり得る。

何パターンていうんだったかな。(´-ω-`)
posted by koteitan at 19:03| Comment(0) | TrackBack(0) | Java | このブログの読者になる | 更新情報をチェックする

2010年04月09日

[Java]StackTrace

うわーん、ギコえもーん、こんな例外がでたよー

((=゚Д゚=) どれどれ、あぁCompiledCodeだな、行数がわからんとな。
     JITを外すといいぞ

ギコえもーん、再現したよー

((=゚Д゚=) どれどれ、あぁ行数が出てないな・・。
     今時、最適化とか化石みたいなことやめたほうがいいぞ

やってみるよー

((=゚Д゚=) まぁ、次にお前は「再現しないよー」と言うッ!
     だろうがな。

ギコえもーん、コンパイルが通らないよー

  _, ._
((=゚ Д゚=)そう来たか・・・。



javac -g:none 
Exception in thread "main" java.lang.NullPointerException
at test.exec(Unknown Source)
at test.main(Unknown Source)

javac -g:source
Exception in thread "main" java.lang.NullPointerException
at test.exec(test.java)
at test.main(test.java)

javac -g:source,lines test.java
Exception in thread "main" java.lang.NullPointerException
at test.exec(test.java:23)
at test.main(test.java:8)

セキュリティ上、見せたらマズイなどの特別な要件が無い限り、
残ってたところで問題ないじゃろうて。
ファイルサイズがシビアな組み込みとかなら別だけど。

posted by koteitan at 16:16| Comment(0) | TrackBack(0) | Java | このブログの読者になる | 更新情報をチェックする

2010年04月08日

[Java]System.gc()の是非

(゚Д゚ )ムハァ 
久しぶりにネタゲットだぜ。某氏感謝だ。

JavaのAPI仕様ではおおよそ以下のような説明だと思う

これはGCの起動を促すだけで、実行される保証もメモリが
開放される保証もなにもない。また、JVM依存である。

付け加えるなら、

JVMは的確にエレガントに必要なタイミングで最小の停止時間でできるようにGCを実行する。特別な理由が無い限り呼ぶ必要はない。
ていうか、呼ぶな。呼ばなきゃならない状況がすでにシステムとして
破綻しとる。



Thread.yeild();しまくって、空きメモリが増えるまでループ、
みたいなコードを書けば見える結果として空きメモリが増えてるかもしれないが、それはあくまで結果であって、呼び出されたかどうかが
保証されるものでもない。こんなコードは下手すりゃ無限ループだ。


で、IBM JDK5とかだとこのGCのログからアプリ様が呼び出してくださったかどうかが判別できる。GCのログ(verboseGC)のタグが
<af> じゃなく <sys> になっているのがあればユーザー促進GC

http://publib.boulder.ibm.com/infocenter/javasdk/v5r0/topic/com.ibm.java.doc.diagnostics.50/diag/tools/gcpd_verbosegc_triggered.html

でもって、diagガイドのPDFにも載ってるけど

http://publib.boulder.ibm.com/infocenter/javasdk/v5r0/index.jsp?topic=/com.ibm.java.doc.diagnostics.50/diag/understanding/mm_gc_interact.html

the System.gc() call suggests that a garbage collection cycle might be run. In fact, the call is interpreted as “Do a full garbage collection scan unless a garbage collection cycle is already executing

GC実行中じゃねーならFullGCやってくれんかね?

FullGC っていうのはググレカスなんだが
今北産業だと重い、止まる、長いGC。
結果として、応答性が下がる、負荷が上がる、温度が上がる、
冷房強くなる、CO2増える、地球温暖化、北極熊が(´(・)`)クマッタだ


うろ覚えだし、どうでもいい話だが確かC#とかの.NETでは
System.GC.Correct()で強制GC。稼働中でunsafeなスレッドが居たら
そやつらの戻りアドレスを暗黒空間へ書き換えて止めるとかそんなん
だったと。

で、結論的にGCあんのになんでアプリがメモリ制御なわけ?
そんなに開放のコストがシビアなシステム(組み込みとか)なら
自分で管理すれば? になるわけ。適材適所なの。

例えるとだな、町中でAT車で2や3にシフトしたところで、
即時に落ちるわけじゃないし、高級車なら自動ブリッピングもするじゃろう(エンジンブレーキも即時反映じゃないじゃろ?)
そりゃあ、そうだ。80kmとかでてるのに、いきなり2にぶち込んだら
逆ウイリーするんちゃうか?てか、タイヤロックしたーうひょー、みたいになるんだが、そうならないようにECUは(゚Д゚#)ゴルァ!!(゚Д゚#)ゴルァ!!(゚Д゚#)ゴルァ!!と燃料噴いて回転数を上げねばならん。ミッションやクラッチだって(`皿´)ウゼー(`皿´)ウゼー(`皿´)ウゼーって思ってるだろう。
エンブレは燃費いい!キリッ!ってやってるのとかわらんわけ。
だからエライ人が設計したDポジションとフットブレーキで止まれって
話なのさ。峠の長い下りなどで2や3でエンブレを同時に使用して
べーバーロックやフェードしないようにするのは別だぞ。
よけい意味わからんか・・。すまん。




http://www-01.ibm.com/support/docview.wss?uid=std3e8009722dfa7ff934925742800234f9c
http://www.atmarkit.co.jp/fjava/rensai3/devedge02/devedge02_2.html
http://www.ibm.com/developerworks/jp/websphere/library/was/was_nglist/5.html
http://www-01.ibm.com/support/docview.wss?uid=std33f1a7f37968ce63749257486000bc691
posted by koteitan at 19:33| Comment(0) | TrackBack(0) | Java | このブログの読者になる | 更新情報をチェックする

2010年03月19日

[java]同期I/O

ファイルに確実に書き込まれるまでwaitさせたい。
まだIOバッファに残っている間に、死んでその他情報と整合性が取れなくなったら困る。

言っていることはわかる、
DBなどに作成したファイルのIDや帳票番号があるのにファイルの実体が無いのが
困るってのはすげーわかる。

こういうコードを書けってことだろう?

FileOutputStream fout = new FileOutputStream( new File ("hoge"));

/*****/

φ(`д´)カキカキ
c⌒っ*゚∀゚)っφ メモメモ...

/***/

FileDescriptor fd = fout.getFD();
fd.sync();

だが、BufferdなStreamを被せてたりした場合、flushしないと
上位に貯まったままだし、神経質なコードになる。
FileDescriptor のsync()はnativeで実装されているから
JVM毎、環境毎にも動作は確認テストが要るすげー面倒だからな。


だが、書き込み先がlinuxのraidでもなんでもないただのIDEって
どういう事だああ〜〜〜っ!?
そんなものでAIX+SANの信頼性と同じものを保証できるかーーーーーッ!
ナメやがってこの言葉ァ、超イラつくぜェ〜〜〜ッ!!
そんな信頼製あるDBがあるならそこにLOBでJTAでつっこんどけってんだ
高い高いって高いのには理由があるんだよ!チクショーーッ。
posted by koteitan at 11:18| Comment(0) | TrackBack(0) | Java | このブログの読者になる | 更新情報をチェックする

2010年03月01日

[java]各種コンパイルエラーメッセージの意味

古いソースを新しいJDKでコンパイルしたらエラーや警告が
どっさり出たでござる、意味わからん分析してくれ。とかいう
作業が来たとき、ググレカスと言えるとなんと幸せか。

そういうために資料をまとめておくぜ。

JDK 1.5エラーメッセージ日英対照表
http://homepage1.nifty.com/algafield/javac15emsgs.html

資料として完璧過ぎる。神。

コンパイル警告と@SuppressWarningsの対応関係虱潰し!
http://d.hatena.ne.jp/kidotaka/20091122/1258922844

エラー/警告
http://www.eclipsewiki.net/eclipse/index.php?%A5%A8%A5%E9%A1%BC%A1%BF%B7%D9%B9%F0#n4774cb9

何故にそのエラー警告になるのか、は上記2サイトが詳しい。

代替手段:コードを直そう
が的確過ぎる。駄菓子菓子、報告書にそう書くと十中八九
「どう直せばいいんですか。具体的に書いて下さい」とか
PGのプライドのかけらも無いような返球がきたりしませんか、
俺のとこだけですか、そうですか。

今回、15万行のコンパイルエラーログから不要な行を削って
4万ぐらいのエラーを調べた(胸やけするぜw)。
面白かったのは

The assignment to variable **** has no effect

その代入は無意味である。無駄無駄無駄無駄(AA略
this.hoge = hoge  と書くべき箇所を
hoge=hoge と書いているとかな。

コンストラクタでのメンバへの割当とかでよくやる。

posted by koteitan at 15:46| Comment(0) | TrackBack(0) | Java | このブログの読者になる | 更新情報をチェックする

2010年02月02日

2009年11月12日

[Java]アトミックパンチ

JDK5からAtomicIntegerってのがあってだね。

これは原子性をたもってくれるというか、まぁ
同期してるカウンター変数だとおもいねぇ。

いままで
public synchronized void add(int n) {
value += n;
}

とか書いてたのが

public void add(int n) {
value.addAndGet(n);
}


こんなのでいけるようになる。
synchronizeって書けば安全なわけではないんだが、
(スレッド個別で生成したローカルオブジェクトに同期してるとかね。
見たことねーかいw )
こっちはライブラリが保証してるし、synchronizeより遥かに速い。
他にもlong用とかもあるよ。

まぁ、いまさらだけどねぇ。
posted by koteitan at 18:43| Comment(0) | TrackBack(0) | Java | このブログの読者になる | 更新情報をチェックする

2009年07月17日

[java]外部プロセス呼び出しについて

外部というか子プロセスというか。
Runtime.getRuntime().exec() で呼び出す処理のことだが
FAQになるぐらい有名なバグがある。

Q12.Runtime#exec()で実行した外部コマンドが動いていないようです。

http://javafaq.jp/S103.html


バッファから抜いてやらんといかんが、
execした瞬間から動き出すので、ちんたらやってはいかん。
並列でやらないとダメ。

Process proc = Runtime.getRuntime().exec("hoge");

final InputStream stdout = proc.getInputStream();
final InputStream stderr = proc.getErrorStream();

Thread outth= new Thread(new Runnable(){
public void run()
{
BufferedReader br = new BufferedReader(new InputStreamReader(stdout));
String line;
while ((line = br.readLine()) != null) {
// 出力内容は好きにしれ
}
br.close();
}
});

Thread errth= new Thread(new Runnable(){
public void run()
{
BufferedReader br = new BufferedReader(new InputStreamReader(stderr));
String line;
while ((line = br.readLine()) != null) {
// 出力内容は好きにしれ
}
  br.close();
}
});

outth.start();
errth.start();
proc.waitFor();
outth.join();
errth.join();
stdout.close();
stderr.close();

こんな感じかのぅ。最後のjoinはwaitFor抜けた時にどうせ終わってるんだが、スレッドのお作法として書いておいたぜ。
エラー処理とかは適宜いれよう。

無理矢理インナークラスにしなくても別個にクラス書いた方が
汎用性が高いのだが、この事象に遭遇するときは大概が
実装もれのケースなのでパッチワークとして書くならこの書き方が
便利かな、という超個人的な意見である。

このバグは優先度が低いので放置プレーっぷりが凄まじい。
http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4109888

最後の方の
I know it's a low priority, but please give this bug a little love.
4 years since the last post on this. Please? 11 years is a long time to wait.

が涙を誘う。
超俺的意訳すると
「(´・ω・`)うん、わかってるんだ。これ優先度低いよね。
 でもね、ちょっとぐらいかまってほしいんだ・・。」
「最後の投稿が4年前とかどうゆうことだお(^ω^#)
 11年放置とかいい加減に汁。」

うーむ・・。バグから仕様に進化しそうな勢いだねぇ。
posted by koteitan at 11:08| Comment(0) | TrackBack(0) | Java | このブログの読者になる | 更新情報をチェックする

2009年06月29日

[Java]JNI memo

すげぇ久しぶりにJNIのコードなんかを書いた。
やりたかったことは大昔のシステムのDLLの関数と
それをリファインしたjavaのライブラリとの動作のチェックなんだけどね。

(1)旧DLLを単体で呼び出し、動作確認 (C++)
(2)ラッパーDLLを作成し、サンプルJavaから呼び出し(C++,java)
(3)javaのライブラリをサンプルjavaから呼び出し(java)
(4)比較ロジックを作成、呼び出し部はスタブにて実行(java)

ココまでは順調だった。

(5)パッケージ分けし、JNIコールも組み込み、DLL内処理に
 printfデバッグを仕込んでおき作動させる -> NG

( ゚Д゚)ハァ?

(6)DLLを単体で呼び出してみる -> OK

例外はUnsatisfiedLinkError 。
System.loadLibraryは成功しているので、これは関数が見つからない
という意味。調べると、javah -jniの使い方に問題があった模様。

・パッケージ名を持っている場合は、そのクラス階層で直接javahしてはダメ。
JNIメソッド名には完全修飾名であるので、呼び出したときにUnsatisfiedLinkErrorになる。

WEB上にたくさんあるサンプルではほとんどが無名パッケージなので、非常に気づきにくい。
javahのヘルプメッセージを凝視すると、


>javah
使い方: javah [options] classes

[options] には次のものがあります。

-help ヘルプメッセージを表示して終了する
-classpath path クラスをロードするバス
-bootclasspath path ブートストラップクラスをロードするパス
-d dir 出力ディレクトリ
-o file 出力ファイル (-d か -o のどちらか一方を使用する)
-jni JNI 形式のヘッダファイルを生成する (デフォルト)
-old JDK1.0 形式のヘッダファイルを生成する
-stubs スタブファイルを生成する
-version バージョン情報を表示する
-verbose 詳細な出力を行う
-force 常に出力ファイルを書き込む

classes は完全指定の名前で指定します (java.lang.Object など)

しっかり書いてある ('A`)ウボア


例えば、jp.hoge.TestJni だった場合、cd jp/hoge/ javah -jni TestJni ではNG
javah -classpath ./ -jni jp.hoge.TestJni とやらないと完全修飾名でヘッダが作成されない。

(7)でもUnsatisfiedLinkError。(;´Д`)ハァハァ

(8)試しにパッケージを取り払って、ヘッダも作り直してみる
  → OK

( ゚д゚)??
やりたいことは検証のみで、時間も迫っていたため
妥協したが、どうも納得いかない。
同様の事例も見あたらないし、メソッド名も間違い無い。
DependencyWalkerで公開関数を見てみたが、ちゃんと公開できてる。
うーむ・・。また折りをみて確認しよう。

参考リンク
posted by koteitan at 16:50| Comment(0) | TrackBack(0) | Java | このブログの読者になる | 更新情報をチェックする