Simple Attempt Wrapping CPP Library

new topic     » topic index » view thread      » older message » newer message

Hello all,

I am trying to wrap a CPP library, not regular C, but CPP. I am getting subscript from an atom error. I'm not suring what I am doing wrong. Is there something extra you need to do when wrapping CPP libraries?

//CPP Code 
#pragma once 
 
#ifdef GETCORETEMPINFO_EXPORTS 
#define GETCORETEMPINFO_API __declspec(dllexport) 
#else 
#define GETCORETEMPINFO_API __declspec(dllimport) 
#endif 
 
#define UNKNOWN_EXCEPTION 0x20000000 
 
typedef struct core_temp_shared_data 
{ 
	unsigned int	uiLoad[256]; 
	unsigned int	uiTjMax[128]; 
	unsigned int	uiCoreCnt; 
	unsigned int	uiCPUCnt; 
	float			fTemp[256]; 
	float			fVID; 
	float			fCPUSpeed; 
	float			fFSBSpeed; 
	float			fMultipier;	 
	char			sCPUName[100]; 
	unsigned char	ucFahrenheit; 
	unsigned char	ucDeltaToTjMax; 
}CORE_TEMP_SHARED_DATA,*PCORE_TEMP_SHARED_DATA,**PPCORE_TEMP_SHARED_DATA; 
 
bool GETCORETEMPINFO_API fnGetCoreTempInfo(CORE_TEMP_SHARED_DATA *&pData); 
bool WINAPI fnGetCoreTempInfoAlt(CORE_TEMP_SHARED_DATA *pData); 
 
class GETCORETEMPINFO_API CoreTempProxy 
{ 
public: 
	CoreTempProxy(void); 
	virtual ~CoreTempProxy(void); 
	 
	UINT GetCoreLoad(int Index) const; 
    UINT GetTjMax(int Index) const; 
    UINT GetCoreCount() const; 
    UINT GetCPUCount() const; 
    float GetTemp(int Index) const; 
    float GetVID() const; 
    float GetCPUSpeed() const; 
    float GetFSBSpeed() const; 
    float GetMultiplier() const; 
    LPCSTR GetCPUName() const; 
    bool IsFahrenheit() const; 
    bool IsDistanceToTjMax() const; 
    const CORE_TEMP_SHARED_DATA &GetDataStruct() const; 
 
	bool GetData(); 
	DWORD GetDllError() const { return GetLastError(); } 
	LPCWSTR GetErrorMessage(); 
private: 
 
	CORE_TEMP_SHARED_DATA m_pCoreTempData; 
	WCHAR m_ErrorMessage[100]; 
}; 
 

include std/machine.e 
include std/ffi.e 
 
atom cpu = 0 
 
cpu = open_dll("GetCoreTempInfo.dll") 
 
if cpu = -1 then 
	puts(1,"Failed to load DLL!\n") 
	abort(0) 
end if 
 
public constant core_temp_shared_data = define_c_type({ 
	{C_UINT,256}, --uiLoad[256] 
	{C_UINT,128}, --uiTjMax[128] 
	C_UINT, --iCorecnt 
	C_UINT, --uiCPUCnt 
	{C_FLOAT,256}, --fTemp[256] 
	C_FLOAT, --fVID 
	C_FLOAT, --CPUSpeed 
	C_FLOAT, --FSBSpeed 
	C_FLOAT, --fMultiplier 
	{C_CHAR,100}, --CPUName[100] 
	C_UCHAR, --uFarenheight 
	C_UCHAR --ucDeltaToTjMax 
}) 
 
export constant xGetCoreLoad = define_c_func(cpu,"+GetCoreLoad",{C_INT},C_UINT), 
				xGetTjMax = define_c_func(cpu,"+GetTjMax",{C_INT},C_UINT), 
				xGetCoreCount = define_c_func(cpu,"+GetCoreCount",{},C_UINT), 
				xGetCPUCount = define_c_func(cpu,"+GetCPUCount",{},C_UINT), 
				xGetTemp = define_c_func(cpu,"+GetTemp",{C_INT},C_FLOAT), 
				xGetCPUName = define_c_func(cpu,"+GetCPUName",{},C_WSTRING) 
 
public function GetCPUName() 
	return c_func(xGetCPUName,{}) 
end function 
 
sequence n = GetCPUName() --error comes from this line 
 
printf(1,"Cores: %s",{n}) 
new topic     » topic index » view thread      » older message » newer message

Search



Quick Links

User menu

Not signed in.

Misc Menu