小弟是学java的,c可以说一窍不通,在用java调OCX控件,在生成DLL时遇到问题:生成了.h文件定义了接口
JNIEXPORT jint JNICALL Java_jni_1test_TerminalScan_InitScanWnd
  (JNIEnv *, jclass, jstring, jstring, jstring, jstring, jstring, jstring, jstring, jstring, jstring);在.cpp文件中应该如何实现这个接口去调用ocx中的方法?
我在一个MFC工程中引入ocx控件自己生成的方法是这样的:
long CTerminalScan::InitScanWnd(LPCTSTR AppID, LPCTSTR SiteNO, LPCTSTR operID, LPCTSTR DateTime, LPCTSTR IPAddr, LPCTSTR IPPort, LPCTSTR Pri, LPCTSTR ScanAttri, BSTR* DocID)
{
long result;
static BYTE parms[] =
VTS_BSTR VTS_BSTR VTS_BSTR VTS_BSTR VTS_BSTR VTS_BSTR VTS_BSTR VTS_BSTR VTS_PBSTR;
InvokeHelper(0x1, DISPATCH_METHOD, VT_I4, (void*)&result, parms,
AppID, SiteNO, operID, DateTime, IPAddr, IPPort, Pri, ScanAttri, DocID);
return result;
}我要实现的接口应该是这样的:
JNIEXPORT jint JNICALL Java_jni_1test_TerminalScan_InitScanWnd
(JNIEnv *env, jclass obj, jstring AppID, jstring SiteNO, jstring operID, jstring DateTime, jstring IPAddr, jstring IPPort, jstring Pri, jstring ScanAttri, jstring DocID)
{
int result = 0;
        result = ......
return result;
}我的理解应该是JNI通过实现这个接口去调用ocx中的方法,但是怎么实现这个接口去调用方法?c我实在是不会,又很着急,谢谢各位大侠帮忙!

解决方案 »

  1.   

    首先MFC的工程类型应该是MFC DLL,在MFC工程中可以为OCX控件添加变量,添加一个CTerminalScan类型的变量,比如m_cTerminalScan。这个不用写代码,直接在VC IDE中操作就可以了。
    然后在MFC的DLL工程中添加Java_jni_1test_TerminalScan_InitScanWnd方法(函数),在其中中调用m_cTerminalScan.InitScanWnd(...)就可以了。
    最后在.def文件中的EXPORTS后面增加一行Java_jni_1test_TerminalScan_InitScanWnd导出这个函数就可以了。
      

  2.   

    一般来说,如果你找不到开源包,那么就通过JNI技术调用DLL,然后用DLL调用OCX控件。
      

  3.   

    java可以直接调用ocx的,你只要拿到ocx的id就可以调用