现在规定VB的调用方法,VB调用不能改,求VC编制Dll的实现
DLL 返回一个字符串 例"中国"Public Declare Function GetIn Lib "TestIn" () As String
VB调用
Dim strZg As String
strZg=GetIn()
编制WIN32还是ATLDLL ,具体实代码
DLL 返回一个字符串 例"中国"Public Declare Function GetIn Lib "TestIn" () As String
VB调用
Dim strZg As String
strZg=GetIn()
编制WIN32还是ATLDLL ,具体实代码
{
return ::SysAllocString(OLESTR("返回串"));
}
{
return ::SysAllocString(OLESTR("返回串"));
} \这样函数名会被编译器加一些字符啊
建议用.def文件,并 _stdcall调用
Public Declare Function GetIn Lib "TestIn" () As String
VB调用
Dim strZg As String
strZg=GetIn()
///////
调用strZg=GetIn() 时出现,时而能显示正确的值,但有时会加上一些乱码,不知是什么原因!!!因为WIN32DLL不能用BSTR,所以用了chat*
win32 DLL;extern "C" __declspec(dllexport) char* __stdcall GetIn();BOOL APIENTRY DllMain( HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{ switch( ul_reason_for_call )
{
case DLL_PROCESS_ATTACH:
break; case DLL_THREAD_ATTACH:
break; case DLL_THREAD_DETACH:
break; case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}char* __stdcall GetIn()
{
char buffer[512];
.....
......
return buffer;
}
DLL 返回一个字符串 例"中国
Public Declare Function GetIn Lib "TestIn" () As String
VB调用
Dim strZg As String
strZg=GetIn()
WIN32DLL 方式strZg值有时会出现乱码(或尾部有乱码式),ATLDLL显示strZg值的全是乱码
请高手指教为什么会出这种情况ATLDLL;
extern "C" __declspec(dllexport) BSTR __stdcall GetIn()
{
char buffer[512];
。。
CString str=buffer;
BSTR bstr=str.AllocSysString();
return bstr;
}WIN32 DLL;;;;;;//32dll 不能用BSTR
#include "stdafx.h"
extern "C" __declspec(dllexport) char* __stdcall GetIn();BOOL APIENTRY DllMain( HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{ switch( ul_reason_for_call )
{
case DLL_PROCESS_ATTACH:
break; case DLL_THREAD_ATTACH:
break; case DLL_THREAD_DETACH:
break; case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}char* __stdcall GetIn()
{
char buffer[512];
。。
return buffer;
}
{
WCHAR buffer[512];
。。
return buffer;
}
前面只能定义char buffer[512];
2. USES_CONVERSION;
return A2W(buffer);
2. USES_CONVERSION;
return A2W(buffer);
/////http://wailingalone.blogbus.com/logs/8050111.html
LPWSTR ConvertLPCSTRToLPWSTR (char* pCstring) { LPWSTR pszOut = NULL; if (pCstring != NULL) { int nInputStrLen = strlen (pCstring); // Double NULL Termination int nOutputStrLen = MultiByteToWideChar(CP_ACP, 0, pCstring, nInputStrLen, NULL, 0) + 2; pszOut = new WCHAR [nOutputStrLen]; if (pszOut) { memset (pszOut, 0x00, sizeof (WCHAR)*nOutputStrLen); MultiByteToWideChar (CP_ACP, 0, pCstring, nInputStrLen, pszOut, nInputStrLen); } } return pszOut; } 通过return ConvertLPCSTRToLPWSTR(buffer)后,VB调用报错
......
CComBSTR bstr = buffer;
return bstr.Detach();
LIBRARY "TestIn"
EXPORTS
GetIn在TestIn.cpp中加入:
LPWSTR __stdcall GetIn()
{
LPWSTR buffer = (LPWSTR)new WCHAR[3];
wsccpy(buffer, L"中国");
return buffer;
}在VB中这样声明:
Public Declare Unicode Function GetIn Lib "TestIn.dll" () As String
return SysAllocString((BSTR)buffer);