-
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
目前还没有答案
相关推荐
3. **调用DLL函数**:使用JNative提供的API,你可以直接调用DLL中的函数。例如,如果你有一个名为`myFunction`的本地方法,可以使用`JNative.callVoidMethod`或相应的函数进行调用。 4. **错误处理**:由于涉及到...
首先定义Java中的JNI接口,然后使用`javah`生成C/C++的头文件,接着编写并编译DLL,最后在Java程序中加载并调用DLL函数。这个过程虽然复杂,但是一旦熟悉了,就能灵活地在Java和本地代码之间建立桥梁,充分利用两者...
接口中的方法声明应与DLL中的函数签名匹配。例如: ```java public interface MyDllLibrary { int callDllFunction(int input); } ``` 4. **加载DLL并调用函数**: 在Java代码中,使用jnative的`NativeLibrary`...
本篇文章将深入探讨`jnative` 1.3和1.4版本,以及如何利用它们来实现Java调用C++ DLL的案例。 `jnative` 是一个开源项目,它为Java开发者提供了一种简单的方式来与本地代码(如C++)进行交互。在`jnative` 1.3和1.4...
标题中的“jnative调用动态库”指的是Java中使用JNative库来调用本地(操作系统级别的)动态链接库(DLL或SO文件)的技术。在Java中,为了与操作系统底层功能进行交互,比如调用C/C++编译的库,我们可以使用Java ...
标题中的“JNA.jar-JNative.jar-dll创建-JAVA调用-VC调用”涉及到的是Java平台下通过JNI(Java Native Interface)的两种实现方式,JNA(Java Native Access)和JNative,来与C/C++编写的动态链接库(DLL)进行交互...
在C/C++中调用DLL,通常涉及到`GetProcAddress`函数来获取函数指针,然后通过这个指针来调用DLL中的函数。而在Java中,JNA和JNative会处理这些细节,提供更友好的接口。 总的来说,这个压缩包提供了Java调用C/C++ ...
JNative的核心思想是通过Java接口来调用DLL中的函数,它提供了一种高级的抽象层,隐藏了JNI的底层细节。这样,开发者可以避免直接编写C语言的头文件和实现文件,减少了工作量和出错的可能性。 使用JNative的过程...
这个示例展示了如何使用JNative在Java中调用一个名为`InterfaceFun`的DLL,该DLL中有一个名为`AddZhiYe`的函数,接收多个参数,包括IP地址、用户名、密码和两个整数,并返回一个整数值。 总的来说,JNative提供了一...
JNative是一个开源的Java库,它提供了一种方法使得Java程序能够直接调用C/C++编写的函数,从而间接实现了调用DLL的功能。JNative通过JNI(Java Native Interface)技术,为Java程序员提供了一个安全且灵活的方式来...
JAVA调用C/C++ DLL文件方法 JAVA 调用 C/C++ 库文件(DLL)是 Java 语言与 C/C++ 语言之间的交互方式之一。在 Java 中,存在多种调用 C/C++ 库文件的方式,包括 JNI、JNative、Jawin 和 Jacob 等。其中,JNI(Java ...
4. **JNI函数调用**:Java代码通过`System.loadLibrary()`加载DLL,然后通过`native`方法声明来调用DLL中的函数。 5. **本地方法接口**:JNI提供的一组接口,用于在Java和本地代码之间建立桥梁,包括创建和初始化...
1. **创建本地方法接口**:在Java类中声明本地方法,这些方法的实现将在DLL中完成。例如: ```java public class NativeDemo { static { System.loadLibrary("JNativeCpp"); // 加载DLL库 } public native ...
JAWINJNative是一种简化了JNI使用的工具,它允许直接调用DLL中的方法而无需编写任何C/C++代码。这极大地降低了调用本地库的复杂度,使得Java开发者能够更加专注于应用程序的核心逻辑。 #### JNA (Java Native ...
一旦完成这些步骤,Java程序就可以像调用普通Java方法一样调用DLL中的函数了。例如: ```java public class Yikatong { static { JNative.loadLibrary("jnative", Yikatong.class); } public native void ...
在上述代码中,`TestConnect`方法使用JNative的`setParameter`方法设置参数,并通过`invoke`方法调用DLL中的函数。注意,在调用完DLL后,确保释放资源,这里通过`n.close()`关闭JNative对象。 总结来说,调用C或C++...
JNativeCpp.dll很可能包含了实际的C++实现,这些实现对应于JNative.jar中声明的原生方法。当Java应用程序通过JNI调用这些方法时,JNativeCpp.dll会被加载并执行相应的功能。 此外,提到的"libJNativeCpp.so"是Linux...
5. **获取函数句柄**:使用`getFunction`方法获取DLL中函数的句柄,然后通过`NativeInvocationHandler`创建一个代理对象。 ```java Function function = lib.getFunction("myFunction"); MyDll dllProxy = ...
3. **方法映射**:JNative内部会将Java的native方法名转换为符合C/C++的函数调用约定的名称,实现Java方法与本地函数的映射。 4. **参数传递**:JNative处理Java对象到C/C++数据类型的转换,确保参数能正确传递给...
使用JNative调用DLL的基本流程: 1. **编写JNI头文件**:使用`javah`工具生成JNI头文件,该文件包含了C/C++函数原型,这些函数将作为Java和本地代码之间的桥梁。 2. **编写本地代码**:根据生成的头文件编写C/C++...