用于在注册表中注册和反注册TypeLib。使用方法:可以用RegTypeLib.exe /? 查看帮助。
源码如下:
下载:下载源文件及可执行文件
RegTypeLib v1.0 (c) Zhenxing Zhou
A tool to register TypeLib or unregister TypeLib
Using RegTypeLib.exe /? to show help
Using RegTypeLib.exe /r <TypeLib file path> to register TypeLib
Using RegTypeLib.exe /u <TypeLib guid> to unregister TypeLib
Example:
RegTypeLib.exe /r D:\a.tlb
RegTypeLib.exe /u {bb6df56e-cace-11dc-9992-0019b93a3a84}
A tool to register TypeLib or unregister TypeLib
Using RegTypeLib.exe /? to show help
Using RegTypeLib.exe /r <TypeLib file path> to register TypeLib
Using RegTypeLib.exe /u <TypeLib guid> to unregister TypeLib
Example:
RegTypeLib.exe /r D:\a.tlb
RegTypeLib.exe /u {bb6df56e-cace-11dc-9992-0019b93a3a84}
源码如下:
#include <Windows.h>
#include <stdio.h>
void ShowErrorMessage();
void ShowUsage();
int wmain(int argc, WCHAR* argv[])
{
if(argc < 2)
{
ShowErrorMessage();
return 1;
}
if(wcslen(argv[1]) != 2)
{
ShowErrorMessage();
return 1;
}
if(argv[1][0] != L'/' && argv[1][0] != L'-')
{
ShowErrorMessage();
return 1;
}
if(argv[1][1] == L'?')
{
ShowUsage();
return 0;
}
if(argc < 3)
{
ShowErrorMessage();
return 1;
}
if(tolower(argv[1][1]) == L'r')
{
HANDLE hFile = CreateFile(argv[2], 0, 0, NULL, OPEN_EXISTING, 0, NULL);
if(hFile == INVALID_HANDLE_VALUE)
{
wprintf(L"The file %s does not exists!\r\n", argv[2]);
return 1;
}
CloseHandle(hFile);
HRESULT hr = S_OK;
ITypeLib *pTypeLib;
hr = LoadTypeLibEx(argv[2], REGKIND_REGISTER, &pTypeLib);
if(FAILED(hr))
{
wprintf(L"Register TypeLib failed. Error Code: %lu", hr);
return 1;
}
else
{
wprintf(L"Register TypeLib succeed.");
pTypeLib->Release();
}
}
else if(tolower(argv[1][1]) == L'u')
{
HRESULT hr = S_OK;
GUID guid;
hr = CLSIDFromString(argv[2], &guid);
if(FAILED(hr))
{
wprintf(L"Can't convert %s to GUID. Error Code: %lu", argv[2], hr);
}
else
{
hr = UnRegisterTypeLib(guid, 1, 0, LANG_NEUTRAL, SYS_WIN32);
if(FAILED(hr))
{
wprintf(L"Can't unregister the TypeLib. Error Code: %lu", hr);
return 1;
}
else
{
wprintf(L"Unregister TypeLib %s successfully.", argv[2]);
}
}
}
else
{
ShowErrorMessage();
return 1;
}
return 0;
}
void ShowErrorMessage()
{
wprintf(L"The syntax of the command is incorrect.\r\n\r\n");
ShowUsage();
}
void ShowUsage()
{
wprintf(L"RegTypeLib v1.0 (c) Zhenxing Zhou\r\n\r\n");
wprintf(L"A tool to register TypeLib or unregister TypeLib\r\n");
wprintf(L"Using RegTypeLib.exe /? to show help\r\n");
wprintf(L"Using RegTypeLib.exe /r <TypeLib file path> to register TypeLib\r\n");
wprintf(L"Using RegTypeLib.exe /u <TypeLib guid> to unregister TypeLib\r\n");
wprintf(L"Example:\r\n");
wprintf(L"\tRegTypeLib.exe /r D:\\a.tlb\r\n");
wprintf(L"\tRegTypeLib.exe /u {bb6df56e-cace-11dc-9992-0019b93a3a84}\r\n");
}
#include <stdio.h>
void ShowErrorMessage();
void ShowUsage();
int wmain(int argc, WCHAR* argv[])
{
if(argc < 2)
{
ShowErrorMessage();
return 1;
}
if(wcslen(argv[1]) != 2)
{
ShowErrorMessage();
return 1;
}
if(argv[1][0] != L'/' && argv[1][0] != L'-')
{
ShowErrorMessage();
return 1;
}
if(argv[1][1] == L'?')
{
ShowUsage();
return 0;
}
if(argc < 3)
{
ShowErrorMessage();
return 1;
}
if(tolower(argv[1][1]) == L'r')
{
HANDLE hFile = CreateFile(argv[2], 0, 0, NULL, OPEN_EXISTING, 0, NULL);
if(hFile == INVALID_HANDLE_VALUE)
{
wprintf(L"The file %s does not exists!\r\n", argv[2]);
return 1;
}
CloseHandle(hFile);
HRESULT hr = S_OK;
ITypeLib *pTypeLib;
hr = LoadTypeLibEx(argv[2], REGKIND_REGISTER, &pTypeLib);
if(FAILED(hr))
{
wprintf(L"Register TypeLib failed. Error Code: %lu", hr);
return 1;
}
else
{
wprintf(L"Register TypeLib succeed.");
pTypeLib->Release();
}
}
else if(tolower(argv[1][1]) == L'u')
{
HRESULT hr = S_OK;
GUID guid;
hr = CLSIDFromString(argv[2], &guid);
if(FAILED(hr))
{
wprintf(L"Can't convert %s to GUID. Error Code: %lu", argv[2], hr);
}
else
{
hr = UnRegisterTypeLib(guid, 1, 0, LANG_NEUTRAL, SYS_WIN32);
if(FAILED(hr))
{
wprintf(L"Can't unregister the TypeLib. Error Code: %lu", hr);
return 1;
}
else
{
wprintf(L"Unregister TypeLib %s successfully.", argv[2]);
}
}
}
else
{
ShowErrorMessage();
return 1;
}
return 0;
}
void ShowErrorMessage()
{
wprintf(L"The syntax of the command is incorrect.\r\n\r\n");
ShowUsage();
}
void ShowUsage()
{
wprintf(L"RegTypeLib v1.0 (c) Zhenxing Zhou\r\n\r\n");
wprintf(L"A tool to register TypeLib or unregister TypeLib\r\n");
wprintf(L"Using RegTypeLib.exe /? to show help\r\n");
wprintf(L"Using RegTypeLib.exe /r <TypeLib file path> to register TypeLib\r\n");
wprintf(L"Using RegTypeLib.exe /u <TypeLib guid> to unregister TypeLib\r\n");
wprintf(L"Example:\r\n");
wprintf(L"\tRegTypeLib.exe /r D:\\a.tlb\r\n");
wprintf(L"\tRegTypeLib.exe /u {bb6df56e-cace-11dc-9992-0019b93a3a84}\r\n");
}
下载:下载源文件及可执行文件
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?