社区
Web 开发
帖子详情
50分悬赏高手急救!求实例在jsp中调用vc++6。0生成的activex控件内的方法
qq14891724
2004-10-27 02:26:28
1、求实例:求实例在jsp中调用vc++6。0生成的activex控件内的方法
2、求实例:activex中调用dll控件方法
很显然,我最后的目的是在jsp中调用dll。
有用的指教同样给分。谢谢大家帮助。
...全文
173
9
打赏
收藏
50分悬赏高手急救!求实例在jsp中调用vc++6。0生成的activex控件内的方法
1、求实例:求实例在jsp中调用vc++6。0生成的activex控件内的方法 2、求实例:activex中调用dll控件方法 很显然,我最后的目的是在jsp中调用dll。 有用的指教同样给分。谢谢大家帮助。
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
9 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
ytcx_lt_82
2005-06-15
打赏
举报
回复
ding
free_card
2005-06-15
打赏
举报
回复
首先,如果我们要用JACOB至少需要对JNI有些基本的了解,写过一些JNI应用程序,这样我们就不难理解JACOB的运行机制。如果我们熟悉C/C++,更加能够增进我们的理解。下面详细介绍下一个简单COM对象的建立,然后演示在C++中如何调用,明白这一点,我们再结合java本地方法的调用机制,从而透过一个中间C++方法调用这个简单COM对象。
1。建立一个COM对象,如下,简单的调用MessageBox弹出消息框。
// HelloWorld.cpp : Implementation of CHelloWorld
#include "stdafx.h"
#include "CPlusCOM.h"
#include "HelloWorld.h"
/////////////////////////////////////////////////////////////////////////////
// CHelloWorld
STDMETHODIMP CHelloWorld::SayHelloWorld()
{
// TODO: Add your implementation code here
MessageBox(NULL, "Hello World.", "CPlusCOM.HelloWorld", 1);
return S_OK;
}
该工程在VC6.0中建立一个简单COM,只添加这个接口方法。
2。然后,我们写一个控制台的C++程序来调用这个COM对象(Client.cpp)
#include <windows.h>
#include "CPlusCOM.h"
const IID IID_IHelloWorld = {0x87A437D2,0x1210,0x4CEC,{0x99,0x67,0xB2,0x75,0x23,0x4C,0x3B,0x64}};
const CLSID CLSID_HelloWorld = {0xCB85B082,0xB040,0x4865,{0x9A,0xEF,0x61,0xCE,0x0E,0xE1,0xAC,0xB1}};
// 这两个常量到MIDL产生的IIDs and CLSIDs声明文件中拷贝出来
int main(int argc, char* argv[]){
CoInitialize(NULL); // Init COM subsystem
IHelloWorld* pHelloWorld;
HRESULT hr = CoCreateInstance(CLSID_HelloWorld, NULL, CLSCTX_ALL, IID_IHelloWorld, (void **)&pHelloWorld);
if (SUCCEEDED(hr)) {
pHelloWorld->SayHelloWorld(); // use the object
}
pHelloWorld->Release(); // free the object
CoUninitialize();
return 0;
}
编译cl Client.cpp /link ole32.lib
生成Client.exe,执行Client.exe,将弹出消息窗口。
3。编写一个java应用,来调用这个COM,这里需要用到第二步技术。首先我们编写一个包含本地方法的java类。
public class JClient{
static {
System.loadLibrary("CPlusCOMBridge");
}
static native void CPlusMessageBox();
public static void main(String[] args){
CPlusMessageBox();
}
}
编译,然后用javah生成本地方法头文件,然后实现本地方法,在本地方法中实现调用COM对象。
#include "JClient.h"
#include "CPlusCOM.h"
#include <windows.h>
const IID IID_IHelloWorld = {0x87A437D2,0x1210,0x4CEC,{0x99,0x67,0xB2,0x75,0x23,0x4C,0x3B,0x64}};
const CLSID CLSID_HelloWorld = {0xCB85B082,0xB040,0x4865,{0x9A,0xEF,0x61,0xCE,0x0E,0xE1,0xAC,0xB1}};
/*
* Class: JClient
* Method: CPlusMessageBox
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_JClient_CPlusMessageBox
(JNIEnv *env, jclass cls){
CoInitialize(NULL); // Init COM subsystem
IHelloWorld* pHelloWorld;
HRESULT hr = CoCreateInstance(CLSID_HelloWorld, NULL, CLSCTX_ALL, IID_IHelloWorld, (void **)&pHelloWorld);
if (SUCCEEDED(hr)) {
pHelloWorld->SayHelloWorld(); // use the object
}
pHelloWorld->Release(); // free the object
CoUninitialize();
}
这个里面方法体与第二步实现是一模一样的。编译中间本地方法
cl JClient.cpp -IE:\j2sdk1.4.2\include -IE:\j2sdk1.4.2\include\win32 /LD /link ole32.lib /out:CPlusCOMBridge.dll
最后,我们就可以跑一跑从java调用这个COM了。
这就是整个java调用COM的过程,JACOB其实就是实现了一个通用的Java-COM的桥梁即JAva-COM Bridge。在后面的文章中我们再来探讨JACOB在实际中的应用。
njpyxujin
2005-05-20
打赏
举报
回复
我写的是JSP调用DLL,用JNI,,我也在搞JSP调用ACTIVEX控件,BTW:我是搞VC的,第一次搞JAVA。
你要的话,我可以把我JNI给你看看。。
wangnewton
2004-11-01
打赏
举报
回复
mark
EdifierX
2004-10-27
打赏
举报
回复
不知道,帮顶。
qq14891724
2004-10-27
打赏
举报
回复
加分,100回报好了,呵呵
wangyugod
2004-10-27
打赏
举报
回复
等待结果 !~~
qq14891724
2004-10-27
打赏
举报
回复
自己顶顶先
qq14891724
2004-10-27
打赏
举报
回复
更正:
2、求实例:activex中调用dll控件方法
应当是
2、求实例:activex中调用dll方法
Android Compose 新闻App(二)ViewModel、Hlit、数据流.docx
Android Compose 新闻App(二)ViewModel、Hlit、数据流.docx
软时间窗下区域内电子商务物流配送线路问题研究.docx
软时间窗下区域内电子商务物流配送线路问题研究.docx
Android kotlin作用域函数.docx
Android kotlin作用域函数.docx
项目管理过程电子文件管理办法.doc
项目管理过程电子文件管理办法.doc
物联网技术在图书馆管理
中
的应用研究.docx
物联网技术在图书馆管理
中
的应用研究.docx
Web 开发
81,122
社区成员
341,744
社区内容
发帖
与我相关
我的任务
Web 开发
Java Web 开发
复制链接
扫一扫
分享
社区描述
Java Web 开发
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章