我正在尝试修改在Visual Studio 2008中开发的ActiveX控件,以将其用于最初未设计的目的。我将重用至少90%的代码。因此,我想首先创建一个使用不同GUID的相同控件。我试着按照我发现的here(2004年编写的一个非常古老的链接)的说明,但是当我尝试构建我的项目时,我在ctlreg.cpp第113行得到了一个断言失败。然后,我恢复了所有的将文件更改回其原始状态,并且对于每个GUID是.odl文件,我在.cpp和.h文件中搜索GUID并在我找到它的任何地方更改它。我还确保更改我的主要版本号。我仍然得到断言失败。我还应该做什么?
这里是ctlreg.cpp的代码,从包含断言的方法开始到断言本身:
BOOL AFXAPI AfxOleRegisterTypeLib(HINSTANCE hInstance, REFGUID tlid,
LPCTSTR pszFileName, LPCTSTR pszHelpDir)
{
BOOL bSuccess = FALSE;
CStringW strPathNameW;
wchar_t *szPathNameW = strPathNameW.GetBuffer(_MAX_PATH);
::GetModuleFileNameW(hInstance, szPathNameW, _MAX_PATH);
strPathNameW.ReleaseBuffer();
LPTYPELIB ptlib = NULL;
// If a filename was specified, replace final component of path with it.
if (pszFileName != NULL)
{
int iBackslash = strPathNameW.ReverseFind('\\');
if (iBackslash != -1)
strPathNameW = strPathNameW.Left(iBackslash+1);
strPathNameW += pszFileName;
}
if (SUCCEEDED(LoadTypeLib(strPathNameW.GetString(), &ptlib)))
{
ASSERT_POINTER(ptlib, ITypeLib);
LPTLIBATTR pAttr;
GUID tlidActual = GUID_NULL;
if (SUCCEEDED(ptlib->GetLibAttr(&pAttr)))
{
ASSERT_POINTER(pAttr, TLIBATTR);
tlidActual = pAttr->guid;
ptlib->ReleaseTLibAttr(pAttr);
}
// Check that the guid of the loaded type library matches
// the tlid parameter.
ASSERT(IsEqualGUID(tlid, tlidActual));