【问题标题】:C++ get arguments from URL schemeC++ 从 URL 方案中获取参数
【发布时间】:2022-06-18 22:13:24
【问题描述】:

我有一个 url 方案 myapp://123456(123456 它是一个动态值)从 webapp 调用一个 exe 文件。该 exe 包含以下代码。我对 C++、VB 或其他桌面语言没有任何经验,我需要动态传递来自 url 的值,那里有硬编码的 pippo,但我做不到。在谷歌上,我发现 Environment.GetCommandLineArgs() 可以正常工作,但它是 C# 而不能在 C++ 上工作 有人可以帮我吗?谢谢

CDdeLauncherDlg::CDdeLauncherDlg(CWnd *pParent )
    : CDialog(CDdeLauncherDlg::IDD, pParent)
{


   //{{AFX_DATA_INIT(CDdeLauncherDlg)
   m_connect = FALSE;
   m_param1 = 50;
   m_param2 = 50;
   m_param3 = 50;
   m_param4 = 50;
   m_appName = _T("GINCOBILOBA");
   m_appExe = m_appName + "1"; // num. sessione
   m_pathName = _T("");
   m_scriptPath = _T("");
   m_code = _T("pippo");

   //}}AFX_DATA_INIT
   // Note that LoadIcon does not require a subsequent DestroyIcon in Win32
   m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);

   m_pConv = NULL;
   m_iconized = false;
   m_isOpen = false; // APP aperta

   this->Connect();
}

这是 Windows 注册表 url 方案:

REGEDIT4

[HKEY_CLASSES_ROOT\Myapp]
@="URL:Myapp Protocol"
"URL Protocol"=""

[HKEY_CLASSES_ROOT\Myapp\DefaultIcon]
@="\"C:\\Program Files\\Myapp\\Myapp.exe\""

[HKEY_CLASSES_ROOT\Myapp\shell]

[HKEY_CLASSES_ROOT\Myapp\shell\open]

[HKEY_CLASSES_ROOT\Myapp\shell\open\command]
@="\"C:\\Program Files\\Myapp\\Myapp.exe\" \"%1\" \"%2\" \"%3\" \"%4\" \"%5\" \"%6\" \"%7\" \"%8\" \"%9\""

【问题讨论】:

  • _T("123456")?您可能需要更详细地解释您的问题
  • 这取决于您实际注册 uri 方案的方式。它可以通过 DDE、命令行等传递...您至少必须提供how you registered the URI scheme in the windows registry,否则将很难回答。
  • “我需要在有 pippo 的地方传递值 123456”——这看起来是一个直截了当的要求。你试过了吗?只需将值"123456" 放在有"pippo" 的地方吗?结果如何?
  • @Turtlefight 我已经在窗口注册表中注册了 url 架构,从一个 web 应用程序我用一个动态值调用了 url 架构,我需要将它传递给 exe 文件,这个 exe 文件通过 DDE将其传递给第三方桌面应用程序。我在 google environment.getcommandlineargs() 上发现它在 C# 上运行良好,但我无法让它在这个 C++ 代码上运行。谢谢

标签: c++


【解决方案1】:

对于 C++ 应用程序,可能应该有一个 main 函数,如下所示:

int main(int argc, const char* argv[])
{
   // ...
}

要读取传递给应用程序的参数,只需读取argv 参数,其中为每个参数保留一个索引,以检查参数数量只需使用argc 参数。

要进行测试,只需在您的代码中找到此函数并实现一种打印这些参数值的方法(例如,使用std::cout)并使用应用程序可执行文件夹中的终端启动应用程序并输入以下内容:

./YourApplication.exe "Hello World!"

在您的情况下,例如,当您通过浏览器调用应用程序时,:// 之后的参数将被忽略。调用应用程序时浏览器不传递参数。

【讨论】:

    猜你喜欢
    • 2013-02-27
    • 2013-06-08
    • 2012-02-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-12
    • 2016-02-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多