0 0

jnative 调用c++的dll中对象内的方法。5

这个是h文件:这里的h文件内是一个对象,jnative无法找到这个对象内的方法。例如login之类的方法。请问各位大神应该如何使用jnative才可以调用到这内部的方法。cpp和h文件没办法修改,是对方给的,我这边只是调用。我用方法工具看也看不到这些方法。
class CSHINE 
{
public:
    CSHINE();
    virtual ~CSHINE();
    BOOL InitShineHttp();
    bool login(CString& strErr,CString url,CString user,CString pwd);
    bool logout();
    bool send(CString& str);
    bool recv(CString& str);
    bool downloadfile(CString bstrXml, CString bstrDestFn);
    bool geterror(CString& str);
    IHttpOPPtr m_Http_OP;
    IMainPtr m_IMainPtr;

};

这个是cpp文件:
// SHINE.cpp: implementation of the CSHINE class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "TEST_SHINEHTTP.h"
#include "SHINE.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CSHINE::CSHINE()
{

}

CSHINE::~CSHINE()
{

}
BOOL CSHINE::InitShineHttp()
{
HRESULT hr;

CLSID Clsid;
::CLSIDFromProgID(L"ShineHttp.Main.1",&Clsid);
hr=::CoCreateInstance(Clsid,NULL,
CLSCTX_INPROC_SERVER,__uuidof(IMain),(void**)&m_IMainPtr);
if(FAILED(hr))
{
return false;
}
return true;

// HRESULT hr;
// CLSID Clsid;
::CLSIDFromProgID(L"ShineHttp.Main.1",&Clsid);
hr=::CoCreateInstance(Clsid,NULL,
CLSCTX_INPROC_SERVER,__uuidof(IMain),(void**)&m_IMainPtr);
if(FAILED(hr))
{
// CSys_mgr::instance()->write_log("初始化ShineHttp失败...\r\n");
AfxMessageBox("初始化ShineHttp失败...");
return false;
}

return true;
}
//登录
bool CSHINE::login(CString& strErr,CString url,CString user,CString pwd)
{
m_Http_OP = m_IMainPtr->GetHttpOP();
BOOL b = m_Http_OP->Login( _bstr_t(url),
_bstr_t(user),
_bstr_t(pwd));

if(!b)
{
CString strErr;
strErr.Format("登陆失败: %s", (char*)(_bstr_t)m_Http_OP->GetLastError());
return false;
}
return true;
}
//退出登录
bool CSHINE::logout()
{
m_Http_OP->Logout();
return true;
}
//发送数据
bool CSHINE::send(CString& str)
{
return m_Http_OP->SendData((_bstr_t)str);
}
//接收数据
bool CSHINE::recv(CString& str)
{
BSTR bstrResponse;
int ret = m_Http_OP->RecvData(&bstrResponse);
str = (char*)(_bstr_t)bstrResponse;
::SysFreeString(bstrResponse);
return ret;
}
//下载文件
bool CSHINE::downloadfile(CString bstrXml, CString bstrDestFn)
{
return m_Http_OP->DownLoadFile((_bstr_t)bstrXml,(_bstr_t)bstrDestFn);
}
//获取错误信息
bool CSHINE::geterror(CString& str)
{
str.Format("%s",(char*)(_bstr_t)m_Http_OP->GetLastError());
return true;
}
2014年10月15日 14:40
目前还没有答案

相关推荐

    在Java程序中使用JNative调用dll文件

    3. **调用DLL函数**:使用JNative提供的API,你可以直接调用DLL中的函数。例如,如果你有一个名为`myFunction`的本地方法,可以使用`JNative.callVoidMethod`或相应的函数进行调用。 4. **错误处理**:由于涉及到...

    简单jnative调用dll例子(含dll代码)

    首先定义Java中的JNI接口,然后使用`javah`生成C/C++的头文件,接着编写并编译DLL,最后在Java程序中加载并调用DLL函数。这个过程虽然复杂,但是一旦熟悉了,就能灵活地在Java和本地代码之间建立桥梁,充分利用两者...

    jnative框架调用dll动态库-简单demo(带dll文件).zip

    接口中的方法声明应与DLL中的函数签名匹配。例如: ```java public interface MyDllLibrary { int callDllFunction(int input); } ``` 4. **加载DLL并调用函数**: 在Java代码中,使用jnative的`NativeLibrary`...

    jnative 1.3,1.4版本 外加java 调用c++ dll 案例

    本篇文章将深入探讨`jnative` 1.3和1.4版本,以及如何利用它们来实现Java调用C++ DLL的案例。 `jnative` 是一个开源项目,它为Java开发者提供了一种简单的方式来与本地代码(如C++)进行交互。在`jnative` 1.3和1.4...

    jnative调用动态库

    标题中的“jnative调用动态库”指的是Java中使用JNative库来调用本地(操作系统级别的)动态链接库(DLL或SO文件)的技术。在Java中,为了与操作系统底层功能进行交互,比如调用C/C++编译的库,我们可以使用Java ...

    JNA.jar-JNative.jar-dll创建-JAVA调用-VC调用

    标题中的“JNA.jar-JNative.jar-dll创建-JAVA调用-VC调用”涉及到的是Java平台下通过JNI(Java Native Interface)的两种实现方式,JNA(Java Native Access)和JNative,来与C/C++编写的动态链接库(DLL)进行交互...

    JNA.jar-JNative.jar-jinvoke.jar-dll创建-JAVA调用-VC调用

    在C/C++中调用DLL,通常涉及到`GetProcAddress`函数来获取函数指针,然后通过这个指针来调用DLL中的函数。而在Java中,JNA和JNative会处理这些细节,提供更友好的接口。 总的来说,这个压缩包提供了Java调用C/C++ ...

    Java调用DLL的工具 JNative

    JNative的核心思想是通过Java接口来调用DLL中的函数,它提供了一种高级的抽象层,隐藏了JNI的底层细节。这样,开发者可以避免直接编写C语言的头文件和实现文件,减少了工作量和出错的可能性。 使用JNative的过程...

    JNative用java调用动态库VC++

    这个示例展示了如何使用JNative在Java中调用一个名为`InterfaceFun`的DLL,该DLL中有一个名为`AddZhiYe`的函数,接收多个参数,包括IP地址、用户名、密码和两个整数,并返回一个整数值。 总的来说,JNative提供了一...

    Java调用DLL例子

    JNative是一个开源的Java库,它提供了一种方法使得Java程序能够直接调用C/C++编写的函数,从而间接实现了调用DLL的功能。JNative通过JNI(Java Native Interface)技术,为Java程序员提供了一个安全且灵活的方式来...

    JAVA调用C/C++ DLL文件方法

    JAVA调用C/C++ DLL文件方法 JAVA 调用 C/C++ 库文件(DLL)是 Java 语言与 C/C++ 语言之间的交互方式之一。在 Java 中,存在多种调用 C/C++ 库文件的方式,包括 JNI、JNative、Jawin 和 Jacob 等。其中,JNI(Java ...

    jnative 源码及dll文件

    4. **JNI函数调用**:Java代码通过`System.loadLibrary()`加载DLL,然后通过`native`方法声明来调用DLL中的函数。 5. **本地方法接口**:JNI提供的一组接口,用于在Java和本地代码之间建立桥梁,包括创建和初始化...

    JAVA调用动态链接库DLL之JNative学习源码

    1. **创建本地方法接口**:在Java类中声明本地方法,这些方法的实现将在DLL中完成。例如: ```java public class NativeDemo { static { System.loadLibrary("JNativeCpp"); // 加载DLL库 } public native ...

    JAVA调用DLL方法 JAVA调用DLL方

    JAWINJNative是一种简化了JNI使用的工具,它允许直接调用DLL中的方法而无需编写任何C/C++代码。这极大地降低了调用本地库的复杂度,使得Java开发者能够更加专注于应用程序的核心逻辑。 #### JNA (Java Native ...

    YiKaTong.rar_JNative_YiKaTong.r_java jnative dll_jnative api_jna

    一旦完成这些步骤,Java程序就可以像调用普通Java方法一样调用DLL中的函数了。例如: ```java public class Yikatong { static { JNative.loadLibrary("jnative", Yikatong.class); } public native void ...

    JAVA如何调用dll:用JNI调用C或C++动态联接库

    在上述代码中,`TestConnect`方法使用JNative的`setParameter`方法设置参数,并通过`invoke`方法调用DLL中的函数。注意,在调用完DLL后,确保释放资源,这里通过`n.close()`关闭JNative对象。 总结来说,调用C或C++...

    JNative.jar和JNativeCpp.dll

    JNativeCpp.dll很可能包含了实际的C++实现,这些实现对应于JNative.jar中声明的原生方法。当Java应用程序通过JNI调用这些方法时,JNativeCpp.dll会被加载并执行相应的功能。 此外,提到的"libJNativeCpp.so"是Linux...

    java调用DLL文件

    5. **获取函数句柄**:使用`getFunction`方法获取DLL中函数的句柄,然后通过`NativeInvocationHandler`创建一个代理对象。 ```java Function function = lib.getFunction("myFunction"); MyDll dllProxy = ...

    JNative Java调用动态链接库jar包

    3. **方法映射**:JNative内部会将Java的native方法名转换为符合C/C++的函数调用约定的名称,实现Java方法与本地函数的映射。 4. **参数传递**:JNative处理Java对象到C/C++数据类型的转换,确保参数能正确传递给...

    Java调用DLL源代码

    使用JNative调用DLL的基本流程: 1. **编写JNI头文件**:使用`javah`工具生成JNI头文件,该文件包含了C/C++函数原型,这些函数将作为Java和本地代码之间的桥梁。 2. **编写本地代码**:根据生成的头文件编写C/C++...

Global site tag (gtag.js) - Google Analytics