在 DLL 中:LPTSR m_lpszBuf = NULL;
{
// ...
// 对 m_lpszBuf 进行操作
// ...
}const LPCTSTR __declspec(dllexport) WINAPI getStr( ..., SIZE_T * const pStrLen = NULL )
{
// ...
// 对 m_lpszBuf 进行操作
// ...
if ( NULL != pStrLen )
{
*pStrLen = strlen( m_lpszBuf );
}
return m_lpszBuf;
}其中,m_lpszBuf 是一个以"\0"结尾的字串,其长度不定(由其它函数决定),
getStr() 函数的目的是为了获取该字串的首地址(也可得到该字串的长度)我用C写该DLL的目的,是希望在其它语言如VB也可自由调用它。请问在VB中,如何申明该函数?如何让VB读出该字串?
如果当前接口无法完成,应该怎样修改 DLL 的导出接口?
{
// ...
// 对 m_lpszBuf 进行操作
// ...
}const LPCTSTR __declspec(dllexport) WINAPI getStr( ..., SIZE_T * const pStrLen = NULL )
{
// ...
// 对 m_lpszBuf 进行操作
// ...
if ( NULL != pStrLen )
{
*pStrLen = strlen( m_lpszBuf );
}
return m_lpszBuf;
}其中,m_lpszBuf 是一个以"\0"结尾的字串,其长度不定(由其它函数决定),
getStr() 函数的目的是为了获取该字串的首地址(也可得到该字串的长度)我用C写该DLL的目的,是希望在其它语言如VB也可自由调用它。请问在VB中,如何申明该函数?如何让VB读出该字串?
如果当前接口无法完成,应该怎样修改 DLL 的导出接口?
extern "C" __declspec(dllexport) bool ReadDXD(char* strFileName, LPDXD pdxd)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
int i, j, num, lRowDem, lColDem;
LPDXD pdxdtemp;
FILE* fp1=NULL; fp1 = fopen(strFileName, "rb");
if(fp1==NULL)return false;
fread(&lRowDem, sizeof(int), 1, fp1);
fread(&lColDem, sizeof(int), 1, fp1);
num = lRowDem*lColDem;
pdxd = (LPDXD)new DXD[num];
pdxdtemp = pdxd;
for(i=0;i<lRowDem;i++)
{
for(j=0;j<lColDem;j++)
{
fread(pdxdtemp, sizeof(DXD), 1, fp1);
pdxdtemp++;
}
}
fclose(fp1);
return true;
}
写成如上形式。
解决方法是制作了一个 TLB 文件给 VB 使用。
参考代码:http://maths.diy.myrice.com/download/HugeCalcV6000b.rar (1.48 MB)现在提个新问题:哪些编程语言支持 TLB 接口文件?
通过 WINAPI 可以巧妙的解决 VB 对不定长字串的操作,且可以做到直接写屏,所以非常高效。
在我提供的压缩包中有详细的源代码,并在 HugeCalc.chm 中附有详尽的说明。现在我的问题是:C#、CB、Delphi、Fortran、PB、VFP 等语言是否支持 TLB 接口文件?