⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 java_stringdata.cpp

📁 C调用Java的一个例子程序
💻 CPP
字号:
#include "../header/JAVA_StringData.h"
#include "../header/JAVA_Debug.h"
#include <string.h>


/* ^_^ {{{  Remark Begin    By XiaoWei 2006-3-28 15:11:03 ----*/
/*
*/

long			JAVA_StringData::getRef()
{
	return m_nRefs;
}
void			JAVA_StringData::addRef()
{
	if (&__defStringData != this) {
		++m_nRefs;
	}	
}
void			JAVA_StringData::subRef()
{
	if (&__defStringData != this) {
		--m_nRefs; 
	}
}

long			JAVA_StringData::getDataLength()
{
	return m_nDataLength;
}
void			JAVA_StringData::setDataLength(long _l)
{
	m_nDataLength = _l;
}

long			JAVA_StringData::getStringLength()
{
	return m_nStringLength;
}
void			JAVA_StringData::setStringLength(long _l)
{
	m_nStringLength = _l;
}

long			JAVA_StringData::getAssignLength()
{
	return m_nAssignLength ;
}
void			JAVA_StringData::setAssignLength(long _l)
{
	m_nAssignLength = _l;
}

LPJTCHAR		JAVA_StringData::data()
{
	return (LPJTCHAR)(this+1);
}
/* ^_^ ---   Remark End    By XiaoWei 2006-3-28 15:11:03 }}}--*/




/* ^_^ 
 *
 * Funtcion Type  :  Class JAVA_StringData Member Function
 * Funtcion Name  :  assign
 *   Return Type  :  wchar_t*	
 *
 *	Parameter 1	: long _strl
 *
 *   Note:
 *		  chief assign memory
 *
 *	Create	:   
 *		Date			   Time				Author
 *	------------------------------------------------
 *   2006-3-28           15:05:42			XiaoWei
 */
LPJTCHAR	JAVA_StringData::assign(long _strl)
{
	_LPBufferType  _ret = _LPBufferType();
	long	__nAllocLength = 0;
#ifndef _DEBUG
	switch(_strl) {
	case 64:
		__nAllocLength = 64 + g_StrExLen ;
		break;
	case 128:
		__nAllocLength = 128 + g_StrExLen ;
		break;
	case 256:
		__nAllocLength = 256 + g_StrExLen ;
		break;
	case 512:
		__nAllocLength = 512 + g_StrExLen ;
		break;
	default:
		__nAllocLength = _strl + g_StrExLen ;
		break;
	}
#else
	__nAllocLength = _strl + g_StrExLen ;
#endif
	
	_ret =  new _BufferType[__nAllocLength];
	JAVA_DEBUGVIEW3(_JAVA_TEXT("JAVA_StringData::assign :%d, addr : %p!"),__nAllocLength,_ret);
	JAVA_ASSERT(_ret);
	memset(_ret,0,__nAllocLength);
	JAVA_StringData* __lpData = (JAVA_StringData*)_ret;
	__lpData->m_nRefs			=	1;
	__lpData->m_nDataLength		= _strl;
	__lpData->m_nAssignLength	= __nAllocLength;
	__lpData->m_nStringLength   = -1;
	return (LPJTCHAR)_ret;
}


void	JAVA_StringData::release(LPJTCHAR& _lpdata)
{
	if ((long)_lpdata == (long)&__defStringData) {
		return;
	}
	JAVA_StringData * __lp = _ToStringData(_lpdata);
	if (__lp->getRef() == 1L) {//only one ref delete it
		delete [] ((_BufferType*)_lpdata);
		JAVA_DEBUGVIEW2(_JAVA_TEXT("JAVA_StringData::release addr : %p!"),_lpdata);
		_lpdata = (LPJTCHAR)&__defStringData;
	}else if (__lp->getRef() > 1L) {
		__lp->subRef();
	}
}



/* ^_^ 
 *
 * Funtcion Type  :  Class 	JAVA_StringData Member Function
 * Funtcion Name  :  string_copy
 *   Return Type  :  void	
 *
 *	Parameter 1	: LPJTCHAR _lp
 *
 *   Note:
 *		 TODO
 *
 *	Create	:   
 *		Date			   Time				Author
 *	------------------------------------------------
 *   2006-3-28           15:48:44			XiaoWei
 */
void		JAVA_StringData::string_copy(LPJTCHAR &_lpdata,LPJCTCHAR _lp)
{
	long  __len  = _strlen(_lp);
	string_copy(_lpdata,_lp,__len);
}


/* ^_^ 
 *
 * Funtcion Type  :  Globle Function
 * Funtcion Name  :  	string_copy
 *   Return Type  :  void	
 *
 *	Parameter 1	: LPJTCHAR _lp
 *	Parameter 2	: long _size
 *
 *   Note:
 *		 TODO
 *
 *	Create	:   
 *		Date			   Time				Author
 *	------------------------------------------------
 *   2006-3-28           16:22:57			XiaoWei
 */
void		JAVA_StringData::string_copy(LPJTCHAR &_lpdata,LPJCTCHAR _lp,long _size)
{
	JAVA_StringData * __lpStringData =  _ToStringData(_lpdata);
	LPJTCHAR  __lpRet = LPJTCHAR();
	LPJTCHAR  __lpDest = LPJTCHAR();
	if (__lpStringData->m_nRefs <= 1L) {		
		if (__lpStringData->m_nDataLength >= _size) {
			__lpDest = __lpStringData->data();
			__lpRet = (LPJTCHAR)_lpdata;
		}else{//need re assign
			release(_lpdata);
			LPJTCHAR __lpNew = assign(_size);
			__lpDest = _ToStringData(__lpNew)->data();
			__lpRet  = __lpNew;
		}

	}else{
		release(_lpdata);
		LPJTCHAR __lpNew = assign(_size);
		__lpDest = _ToStringData(__lpNew)->data();
		__lpRet  = __lpNew;		
	}

	_strcpy(__lpDest,_lp);
	__lpStringData->setStringLength(_size);
	__lpDest[_size] = '\0';/*  ^_^ -- By XiaoWei  2006-3-29-- *///
	_lpdata =  __lpRet;
}




⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -