先附上DLL源码,主要功能是遍历注册表,得到相应的串口号。
returnusbcom.h
#include <Afx.h>
_declspec(dllexport)char* back = new char[10];
extern "C" _declspec(dllexport) char* returnusbcom(char* comname)returnusbcom.cpp
#include "returnusbcom.h"
char* returnusbcom(char* lpname)
{
ZeroMemory(back, 10);
HKEY Result;          
long open=RegOpenKeyEx(HKEY_LOCAL_MACHINE,"HARDWARE\\DEVICEMAP\\SERIALCOMM",0,KEY_ALL_ACCESS,&Result);   
if(open==ERROR_SUCCESS)   
{   
TCHAR namebuffer[100]; 
char contentbuffer[10];
DWORD nameSize = 100;
DWORD contentSize = 10;
long len = 10;
DWORD index = 0; ZeroMemory(namebuffer, 100);
ZeroMemory(contentbuffer, 10);
while(RegEnumValue(Result, index, namebuffer, &nameSize, NULL, NULL, (BYTE*)contentbuffer, &contentSize)!=ERROR_NO_MORE_ITEMS)   
        {   
index++;   
CString temp = namebuffer; if(-1 != temp.Find(lpname, 0))
{
strcpy(back, contentbuffer);
CloseHandle(Result);
// MessageBox(NULL, back, NULL, MB_OK);
return back;
}
else
{
ZeroMemory(namebuffer, 100);
ZeroMemory(contentbuffer, 10);
}
}
}
CloseHandle(Result);
// MessageBox(NULL, back, NULL, MB_OK);
return 0;
}再附上调用文件源码
#include <windows.h>
#include <iostream.h>
main()
{
HMODULE hm = LoadLibrary("RETURNUSBCOM.dll");
if(hm)
{
typedef char* (CALLBACK *RUM)(char*);
RUM rum;
rum = (RUM)GetProcAddress(hm , TEXT("returnusbcom")); if(rum)
{
char* name = new char[20];
name = (*rum)("VCP");
cout<<name<<endl;
}
}
return 0;
}调用的时候报错:
The value of ESP was not properly saved across a fund:on call
i386\chkesp.c line:42我在returnusbcom前面加上WINAPI也是不行,请教各位高手,多谢!!