Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/137.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++;从一个函数调用另一个函数 我有一个C++自定义动作项目。我有两个函数,RegProductName和GetProductName_C++_Custom Action - Fatal编程技术网

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 );