C++;从一个函数调用另一个函数 我有一个C++自定义动作项目。我有两个函数,RegProductName和GetProductName
我调用C++;从一个函数调用另一个函数 我有一个C++自定义动作项目。我有两个函数,RegProductName和GetProductName,c++,custom-action,C++,Custom Action,我调用RegProductName,它有三种可能的结果。在if语句中,如果是结果1或结果2,则调用第二个函数GetProductName,但我似乎无法让它工作。谁能给我举个从一个函数调用另一个函数的例子吗 extern "C" UINT __stdcall RegProductName(MSIHANDLE hInstall) { AssertSz(FALSE, "debug here"); DebugBreak(); HRESULT hr = S_OK; UINT er = ERROR_SUC
RegProductName
,它有三种可能的结果。在if语句中,如果是结果1或结果2,则调用第二个函数GetProductName
,但我似乎无法让它工作。谁能给我举个从一个函数调用另一个函数的例子吗
extern "C" UINT __stdcall RegProductName(MSIHANDLE hInstall)
{
AssertSz(FALSE, "debug here");
DebugBreak();
HRESULT hr = S_OK;
UINT er = ERROR_SUCCESS;
char szProductName[MAX_PATH];
hr = WcaInitialize(hInstall, "RegProductName");
ExitOnFailure(hr, "Failed to initialize");
WcaLog(LOGMSG_STANDARD, "Initialized.");
strcpy(szProductName, Orc_Get_Product_Name());
if(szProductName == "ORCHESTRATOR")
{
GetProductName();
}
else if (szProductName == "CORAL")
{
GetProductName();
}
else
{
MsiSetProperty(hInstall, "PRODUCTNAME", szProductName);
}
LExit:
er = SUCCEEDED(hr) ? ERROR_SUCCESS : ERROR_INSTALL_FAILURE;
return WcaFinalize(er);
}
错误是“当我将鼠标悬停在GetProductName();
这不会比较字符串内容:
if(szProductName == "ORCHESTRATOR")
使用strcmp()或使用std::string
和==
:
if(szProductName == std::string("ORCHESTRATOR"))
您的GetProductName()
函数接受一个参数MSIHANDLE hInstall
。调用它时需要提供该参数。例如,如果您只想使用与调用RegProductName()
时使用的相同句柄调用它,请执行以下操作:
GetProductName(hInstall);
GetProductName
需要一个类型为MSIHANDLE
的参数,而您调用它时没有任何参数。请尝试
GetProductName(hInstall);
您的GetProductName如下所示:
extern "C" UINT __stdcall GetProductName(MSIHANDLE hInstall)
\________________/
The Argument
所以它需要取1个参数,而你根本不用argumanes调用它:
getProductName( );
^
|
nothing is being passed here
因此,您会收到错误。根据您的代码,您可能应该在那里传递您的hInstall
:
getProductName( hInstall );
GetProductName
定义为GetProductName(MSIHANDLE hInstall)
,这意味着您必须将相关的MSIHANDLE作为参数传递。这正是您遇到的错误。
但是,你正在做的是<代码> SZOPTIONTYN= =“配器”< /C> >这不是你在C.中比较字符串的方式,你似乎缺少关于C. You的基本知识,不应该用C或C++写。< /P>请把你现在的代码和相关的编译器输出一起发布。任何代码来显示你在做什么?<代码>无效Funa(){}} FunB(){FUNAUR());<代码>你在这里。也许你可以告诉我们你尝试了什么,我们也许可以告诉你有什么不对。@ HMJD我已经添加了我的代码。谢谢。IL改变现在我不太确定是否正确,但是试图先得到函数。谢谢……谢谢,我对C或C++没有太多的了解,但是我正在努力学习,就像我一样。我有几本有用的书,当我写这本书的时候我很忙。我不认为它会起作用,但很快就把它放进去发布我的代码。Thanks@NC1在外语中直接跳入复杂的框架通常是一种痛苦的经历……这符合语言标准,但它对定制动作框架有效吗?
getProductName( hInstall );