Я импортировал компонент Activex (* .ocx) в Embarcadero C ++ Builder 10.2, когда я собираю программу, я получаю это предупреждение «Предупреждение W8127 Функция определена с различными связями».
Может кто-нибудь сказать мне, как я могу решить эту проблему. Мой код ниже:
#include <vcl.h>
#pragma hdrstop
#include <System.Win.ComServ.hpp>
#include <axbase.h>
#include <olectl.h>
#pragma package(smart_init)
#pragma link "System.Win.ComServ"
#pragma package(smart_init)
#pragma link "System.Win.ComServ"
// -----------------------------------------------------------------------------
// Entry point of your Server invoked by Windows for processes or threads are
// initialized or terminated.
//
// -----------------------------------------------------------------------------
int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void*)
{
return TRUE;
}
// -----------------------------------------------------------------------------
// Entry point of your Server invoked to inquire whether the DLL is no
// longer in use and should be unloaded.
// -----------------------------------------------------------------------------
STDAPI __export DllCanUnloadNow(void)
{
Comserv::TComServer* comserver = Comserv::GetComServer();
return (!comserver ||
((comserver->ObjectCount /* + comserver->FactoryCount */) == 0)) ?
S_OK : S_FALSE;
}
// -----------------------------------------------------------------------------
// Entry point of your Server allowing OLE to retrieve a class object from
// your Server
// -----------------------------------------------------------------------------
STDAPI __export DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID* ppv)
{
Comobj::TComObjectFactory* Factory = Comobj::ComClassManager()->GetFactoryFromClassID(rclsid);
if (Factory)
{
if (Factory->GetInterface(riid, ppv))
return S_OK;
else
return E_NOINTERFACE;
}
else
{
*ppv = 0;
return CLASS_E_CLASSNOTAVAILABLE;
}
}
// -----------------------------------------------------------------------------
// Entry point of your Server invoked to instruct the server to create
// registry entries for all classes supported by the module
// -----------------------------------------------------------------------------
STDAPI __export DllRegisterServer(void)
{
Comserv::TComServer* comserver = Comserv::GetComServer();
if (comserver)
{
try
{
comserver->LoadTypeLib();
comserver->UpdateRegistry(true);
return S_OK;
}
catch(...)
{
return E_FAIL;
}
}
else
{
return E_FAIL;
}
}
// -----------------------------------------------------------------------------
// Entry point of your Server invoked to instruct the server to remove
// all registry entries created through DllRegisterServer.
// -----------------------------------------------------------------------------
STDAPI __export DllUnregisterServer(void)
{
Comserv::TComServer* comserver = Comserv::GetComServer();
if (comserver)
{
try
{
comserver->LoadTypeLib();
comserver->UpdateRegistry(false);
return S_OK;
}
catch(...)
{
return E_FAIL;
}
}
else
{
return E_FAIL;
}
}
// ------------------------------------------------------------------------------
// Entry point of your Server installation/setup. Used for 'PerUser' registration
// Invoked via call to "regsvr32 /n /i:user [/u] axlibrary.dll"
// ------------------------------------------------------------------------------
STDAPI __export DllInstall(BOOL bInstall, LPCWSTR pszCmdLine)
{
Comserv::TComServer* comserver = Comserv::GetComServer();
if (comserver)
{
bool savePerUser = comserver->PerUserRegistration;
if (pszCmdLine && !StrIComp(pszCmdLine, L"user"))
comserver->PerUserRegistration = true;
else
comserver->PerUserRegistration = false;
HRESULT result = E_FAIL;
if (bInstall)
{
result = DllRegisterServer();
if (result == E_FAIL)
DllUnregisterServer();
}
else
result = DllUnregisterServer();
comserver->PerUserRegistration = savePerUser;
return result;
}
else
{
return E_FAIL;
}
}
Функции DllCanUnloadNow()
и DllGetClassObject
объявлены в этом заголовочном файле "comebaseapi.h" следующим образом:
_Check_return_
STDAPI DllGetClassObject(_In_ REFCLSID rclsid, _In_ REFIID riid, _Outptr_ LPVOID FAR* ppv);
__control_entrypoint(DllExport)
STDAPI DllCanUnloadNow(void);
Функции DllRegisterServer()
и DllUnregisterServer()
объявлены в этом заголовочном файле "olectl.h" следующим образом: __control_entrypoint(DllExport)
STDAPI DllRegisterServer(void);
__control_entrypoint(DllExport)
STDAPI DllUnregisterServer(void);
Функция DllInstall()
объявлена в этом заголовочном файле "shlwapi.h" следующим образом:
// DllInstall (to be implemented by self-installing DLLs)
STDAPI DllInstall(BOOL bInstall, _In_opt_ PCWSTR pszCmdLine);
Благодарю вас за поддержку.