知新轩
温故而知新,可以为师矣.
posts - 7,  comments - 2,  trackbacks - 0
解决方案:
下载并安装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 ___ 阅读(1292) | 评论 (0)编辑 收藏
     摘要: 在struts2中,japserreport通过编写插件扩展"result-types"的形式实现了跟struts2的集成,本文将采用相同的集成方式,将Crystal Report与struts2集成.  阅读全文
posted @ 2008-02-23 22:21 ___ 阅读(884) | 评论 (0)编辑 收藏
框架为骨,应用为肉,架构为魂.
posted @ 2007-08-01 16:16 ___ 阅读(205) | 评论 (0)编辑 收藏
编码若禹王制水,宜疏不宜堵.
posted @ 2007-07-05 11:56 ___ 阅读(174) | 评论 (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 ___ 阅读(3150) | 评论 (2)编辑 收藏

<2005年12月>
27282930123
45678910
11121314151617
18192021222324
25262728293031
1234567

常用链接

留言簿(1)

随笔档案(6)

搜索

  •  

最新评论

阅读排行榜

评论排行榜