小编All*_*ria的帖子

如何将函数指针从C#传递给C++ Dll?

C++ dll中定义的函数是:

static double (*Func1)(double);
EXTERN_C __declspec(dllexport) __stdcall double TestDelegate(double (*fun)(double))
{
    Func1 = fun;
    return Func1(25.0);
}


void My_Real_purpose()
{
    SomeClass a;
    a.SetFunction(Func1);//Define behaviour of a by C# in runtime
    a.DoSomething();//Even I want it runs in another thread!
}
Run Code Online (Sandbox Code Playgroud)

我试着用C#这样调用它:

    class A
    {
        [DllImport("DllName.dll")]
        public extern static double TestDelegate(IntPtr f);

        public delegate double MyFuncDelegate(double x);

        public static double MyFunc(double x)
        {
            return Math.Sqrt(x);
        }

        static MyFuncDelegate ff;
        static GCHandle gch;
        public static double Invoke()
        {
            ff = new MyFuncDelegate(MyFunc); …
Run Code Online (Sandbox Code Playgroud)

c# c++ dll pinvoke delegates

5
推荐指数
1
解决办法
4233
查看次数

CreateProcess 总是失败

我试图用CreateProcessC++创建一个进程。但是这个函数总是返回false。

这是我的一些代码:

#if UNICODE
    std::wstring exename =
#else
    char* exename =
#endif
    _T("?c:\\Windows\\Notepad.exe");

    STARTUPINFO si;
    memset(&si, 0, sizeof(STARTUPINFO));
    si.cb = sizeof(STARTUPINFO);
    si.dwFlags = STARTF_USESHOWWINDOW;
    si.wShowWindow = SW_SHOW;

    PROCESS_INFORMATION pi;
    if (!CreateProcess(exename, NULL, NULL, NULL, false, 0, NULL, NULL, &si, &pi))
    {
        cout << "Error code=" << GetLastError() << endl;
    }
Run Code Online (Sandbox Code Playgroud)

程序显示错误代码123。我尝试将makeexename作为第二个参数,然后错误代码更改为2。

我用谷歌搜索了一天,并尝试将项目的字符集更改为多字节或 Unicode,替换CreateProcessCreateProcessAor CreateProcessW,替换char *LPCSTRorLPCWSTR以及许多其他尝试。他们都没有解决问题,但显示相同的错误代码。

我在 Windows 10 中运行该代码并使用 Visual Studio 2013 编译它。我确定我的计算机上存在“c:\Windows\Notepad.exe”。

它让我发疯了,请帮助我。任何提示将不胜感激。

此问题的解决方法: …

c++ windows winapi

0
推荐指数
1
解决办法
115
查看次数

标签 统计

c++ ×2

c# ×1

delegates ×1

dll ×1

pinvoke ×1

winapi ×1

windows ×1