关于串口控件注册的问题

south2000 2005-06-15 11:28:18
我用windows2000, vc6sp6
以前写程序的时候,都是用静态连接的方式。这样的话,把产生的exe文件直接拷贝给其他人,直接就可以用了,虽然这样得到的exe文件有点大,但是方便。

现在我遇到的问题是,我在程序里面使用了微软的串口通讯的控件mscomm,我用同样的方法产生的exe文件给其他人时候,如果其他的机器,装vc的话,可以运行;如果没有装vc的话,就运行不起来了,并且提示信息“Microsoft Visual C++ Runtime Library, Runtime Error, abnormal program termination”。 我猜想恐怕是其他人机器没有注册这个串口控件的原因。

请问,如何在程序里面如何写代码注册这个控件?

有没有更简单的方法,可以让我产生的exe可以在其他人机器上面直接运行?

谢谢!
...全文
788 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
xhwu3721 2005-06-20
  • 打赏
  • 举报
回复
mark
xqk 2005-06-15
  • 打赏
  • 举报
回复
mark
qin_wei 2005-06-15
  • 打赏
  • 举报
回复
把mscomm32.ocx也放在你的应用程序目录下,然后应用程序每次启动调用以下函数注册(路径自己修改)
bool RegMscomm()
{
//注册串口控件
HKEY hClsIDkey = NULL;//注册表键句柄
DWORD disposition;
DWORD datatype =REG_SZ;
bool bNeedReg = false;
char *szsubkey = "CLSID\\{648A5600-2C6E-101B-82B6-000000000014}\\InprocServer32";
if(::RegOpenKeyEx(HKEY_CLASSES_ROOT,szsubkey,REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS, &hClsIDkey) != ERROR_SUCCESS )
{
bNeedReg = true;
}
else
{
//::RegCreateKeyEx(HKEY_CLASSES_ROOT,szsubkey ,0, NULL, REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS, NULL, &hClsIDkey, &disposition);
long ret ;
char pFile[255];
memset(pFile,0,255);
DWORD datalen = 255;

int retvalue = 0;
ret = ::RegQueryValueEx(hClsIDkey,"", NULL, &datatype, (unsigned char*)pFile, &datalen );
if(hClsIDkey)
::RegCloseKey( hClsIDkey);
CFileFind ff;
bNeedReg = (ret!=ERROR_SUCCESS || ! ff.FindFile(pFile));
ff.Close();
}

if(bNeedReg)
{
HINSTANCE hLib = LoadLibrary(gpApp->g_myPublic.GetMyPath() +"\\mscomm32.ocx");//装载ActiveX控件
if (hLib < (HINSTANCE)HINSTANCE_ERROR) return false;
FARPROC lpDllEntryPoint;
lpDllEntryPoint = GetProcAddress(hLib,("DllRegisterServer"));//获取注册函数DllRegisterServer地址
if(lpDllEntryPoint==NULL)
{
FreeLibrary(hLib);
return false;
}

if(FAILED((*lpDllEntryPoint)()))
{
FreeLibrary(hLib);
return false;
}
FreeLibrary(hLib);
}
HKEY hkey = NULL;//注册表键句柄

if(::RegCreateKeyEx(HKEY_CLASSES_ROOT, "Licenses\\4250E830-6AC2-11cf-8ADB-00AA00C00905",0, NULL, REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS, NULL, &hkey, &disposition) == ERROR_SUCCESS)
{
char *pdata = "kjljvjjjoquqmjjjvpqqkqmqykypoqjquoun";//[255];
datatype =REG_SZ;
::RegSetValueEx(hkey, "",0, datatype, (unsigned char*)pdata, strlen(pdata)+1 );
if(hkey)
::RegCloseKey( hkey);
}
return true;
}
flyelf 2005-06-15
  • 打赏
  • 举报
回复
做一个安装程序,在安装程序中注册控件
south2000 2005-06-15
  • 打赏
  • 举报
回复
qin_wei(烤毛蛋),谢谢你!

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧