

![]() | Start a set with this search |
![]() | Include this search in one of my sets |
![]() | Exclude this search from one of my sets |
![]() | Permalink to these results Paste this link in email or IM: |
| Atom feed for tracking future search results Paste this URL into your reader: |
1 message in net.java.dev.jna.users[jna-users] Windows DLL containing a ...| From | Sent On | Attachments |
|---|---|---|
| Steve Sobol (JDN) | Nov 9, 2008 4:42 pm |

![]() | Permalink for this message Paste this link in email or IM: |
![]() | Permalink for this thread Paste this link in email or IM: |
| Atom feed for this thread Paste this URL into your reader: |
| Subject: | [jna-users] Windows DLL containing a C++ class (long) | Actions... |
|---|---|---|
| From: | Steve Sobol (JDN) (java...@SteveSobol.com) | |
| Date: | Nov 9, 2008 4:42:20 pm | |
| List: | net.java.dev.jna.users | |
Hello,
I'm trying to use the EchoWare SDK (http://www.echogent.com) from Java. EchoWare essentially allows you to tunnel TCP connections through a central server.
The DLL contains the following functions:
bool *InitializeProxyDll* ()
char* *GetDllVersion()* void *SetLoggingOptions*(bool bEnablelogging, char *szLogPath) void* *CreateProxyInfoClassObject* () void *DeleteProxyInfoClassObject* (void* pProxyInfo) bool *SetPortForOffLoadingData*(int DataOffLoadingPort) bool *SetPortForOffLoadingDataType *(void* pProxyInfo, int DataOffLoadingPort, char* szConnectionType, char* AppID) void *AutoConnect*() int *ConnectProxy*(void* pProxyInfo) bool *DisconnectProxy*(void* pProxyInfo) bool *DisconnectAllProxies*() int *EstablishNewDataChannel*(void* pProxyInfo , char* IDOfPartner) int *EstablishNewDataChannelType*(void* pProxyInfo , char* IDOfPartner, char* szConnectionType) int *EstablishServerMirrorType*(void* pProxyInfo , char* IDOfPartner, char* szConnectionType, char* port) void *EndServerMirror*(void* pProxyInfo , char* port) void *SetEncryptionLevel(int level, void* pProxyInfo) *void* SetLocalProxyInfo(char* ip, char* port, char* username, char* password)** LONG GetMyGroups(void* pProxyInfo , char *buffer, int nLen)** LONG* *GetMyPeers(void* pProxyInfo , char* groupname, char *buffer, int nLen)*
And here's my Java interface:
package com.lobosstudios.echoj;
import com.sun.jna.Library; import com.sun.jna.Native; import com.sun.jna.NativeLong; import com.sun.jna.Pointer;
public interface Echoware extends Library {
Echoware INSTANCE = (Echoware) Native.loadLibrary("echoware",Echoware.class); boolean InitializeProxyDll(); String GetDllVersion(); void SetLoggingOptions(boolean bEnablelogging, String szLogPath); Pointer CreateProxyInfoClassObject(); void DeleteProxyInfoClassObject(Pointer pProxyInfo); boolean SetPortForOffLoadingData(int DataOffLoadingPort); boolean SetPortForOffLoadingDataType(Pointer pProxyInfo,int DataOffLoadingPort, String szConnectionType, String AppID); void AutoConnect(); int ConnectProxy(Pointer pProxyInfo); boolean DisconnectProxy(Pointer pProxyInfo); boolean DisconnectAllProxies(); int EstablishNewDataChannel(Pointer pProxyInfo, String IDOfPartner); int EstablishNewDataChannelType(Pointer pProxyInfo, String IDOfPartner, String szConnectionType); int EstablishServerMirrorType(Pointer pProxyInfo, String IDOfPartner,String szConnectionType, String port); void EndServerMirror(Pointer pProxyInfo, String port); void SetEncryptionLevel(int level, Pointer pProxyInfo); void SetLocalProxyInfo(String ip, String port, String username,String password); NativeLong GetMyGroups(Pointer pProxyInfo, String buffer, int nLen); NativeLong GetMyPeers(Pointer pProxyInfo, String groupname,String buffer, int nLen);
}
OK! So far, so good. But... note that there are several functions that either take a void pointer as an argument, or return a void pointer. The void pointer is actually a pointer to an IDllProxyInfo C++ object.
I don't think this would be a problem, except that once I have an instance of IDllProxyInfo, I need to call some of its methods.
How do I implement this? It's been a LONG time since the last time I did any C++ programming, but I recall that C++ objects are similar to C structures. Is this correct? How do I implement IDllProxyInfo in Java using JNA?
Here's IDllProxyInfo.h from the EchoWare SDK:
#ifndef _INTERFACE_DLL_PROXY_INFO_H #define _INTERFACE_DLL_PROXY_INFO_H
#if _MSC_VER > 1000 #pragma once #endif
//enum //{ // STATUS_MSG_BASE = WM_USER + 3000,
#define STATUS_CONNECTING 0x00000001 #define STATUS_CONNECTED 0x00000002 #define STATUS_AUTHENTICATING 0x00000004 #define STATUS_AUTHENTICATION_FAILED 0x00000008 #define STATUS_ESTABLISHING_DATA_CHANNEL 0x00000010 #define STATUS_SEARCHING_FOR_PARTNER 0x00000020 #define STATUS_DISCONNECTED_FROM_PROXY 0x00000040
// STATUS_MSG_LAST //};
enum { ERROR_CONNECTING_TO_PROXY = -1, CONNECTION_SUCCESSFUL, NO_PROXY_SERVER_FOUND_TO_CONNECT, AUTHENTICATION_FAILED, PROXY_ALREADY_CONNECTED, CONNECTION_TIMED_OUT, ID_FOUND_EMPTY };
class IDllProxyInfo { public: virtual void SetName(char* name) = 0; virtual void SetIPPort(char* ipport) = 0; virtual void SetIP(const char* ip) = 0; virtual void SetPort(const char* port) = 0; virtual void SetPassword(const char* pass) = 0; virtual void SetStatus(int Status, bool bStatus) = 0; virtual bool SetMyID(const char* MyID) = 0; virtual bool SetSocketTimeout(int connectTimeout, int ReceiveTimeout, int SendTimeout) =0; virtual void SetReconnectProxy(bool bReconnectProxy) = 0;
virtual const char* GetName() const= 0; virtual const char* GetIpPort() const= 0; virtual const char* GetIP() const= 0; virtual const char* GetPort() const= 0; virtual const char* GetPassword() const= 0; virtual int GetStatus() const= 0; virtual const char* GetMyID() const= 0; virtual bool GetReconnectProxy()const = 0; };
#endif
Thanks in advance, Steve
-- Steve Sobol, Victorville, California, USA It's all fun and games until someone starts a bonfire in the living room.







