解決方案:
下載并安裝Microsoft Visual C++ 2005 SP1 Redistributable Package (x86)
http://www.microsoft.com/downloads/thankyou.aspx?familyId=200b2fd9-ae1a-4a14-984d-389c36f85647&displayLang=zh-cn
PS:
一定得是SP1版本才行,裝過Microsoft Visual C++ 2005 Redistributable Package (x86),但是問題依舊。
微軟的補丁做的很細很強大啊。
posted @
2008-05-26 13:48 ___ 閱讀(1311) |
評論 (0) |
編輯 收藏
摘要: 在struts2中,japserreport通過編寫插件擴展"result-types"的形式實現了跟struts2的集成,本文將采用相同的集成方式,將Crystal Report與struts2集成.
閱讀全文
posted @
2008-02-23 22:21 ___ 閱讀(893) |
評論 (0) |
編輯 收藏
框架為骨,應用為肉,架構為魂.
posted @
2007-08-01 16:16 ___ 閱讀(215) |
評論 (0) |
編輯 收藏
編碼若禹王制水,宜疏不宜堵.
posted @
2007-07-05 11:56 ___ 閱讀(185) |
評論 (0) |
編輯 收藏
使用gcc(win32)根據java導出的jini頭文件,編譯出的動態庫,無法被java正常的調用.而相同的頭文件,使用vc6編譯出的dll則可以.函數聲明如下:
JNIEXPORT jint JNICALL Java_DataModule_VersionCtrl_CPP_1SrvVsn_1Depend
(JNIEnv *, jobject, jstring, jint, jstring, jint, jint, jstring);
其中:
JNIEXPORT 在gcc和vc6的中都是定義為 __declspec(dllexport)
JNICALL 在兩種編譯環境下也都是定義為 __stdcall
觀察兩種環境下生成的dll,發現這兩個dll導出的函數名稱有所區別.
一個是 (gcc)
Java_DataModule_VersionCtrl_CPP_1SrvVsn_1Depend@32
另一個是(vc6)
_Java_DataModule_VersionCtrl_CPP_1SrvVsn_1Depend@32
相差了一個下劃線!!
難道是因為gcc編譯出的函數名稱與java預期的不一致,導致其在java中不能被正常的調用?于是,手動修改用于gcc編譯的jini頭文件中的函數聲明,在其原有名稱前加一個下劃線,使其與vc6的輸出的名稱一致,并相應修改函數定義中的函數名稱.重現編譯之,并再次于java中調用,竟然通過了.
google搜索 __stdcall
發現不同編譯器對__stdcall的實現是不同的,所以導致相同的聲明下,輸出函數名不一致.而java在win32平臺下默認是以微軟的vc6的編譯輸出格式為標準進行調用的.所以相同的頭文件vc6可以,而gcc不行,(bcb也不行)
或許java有選項可以輸出兼容于其他編譯器的JNI頭文件吧.^_^.
posted @
2005-12-23 10:47 ___ 閱讀(3174) |
評論 (2) |
編輯 收藏