将DllImport从C#console app中的静态类的静态成员转换为C++ CLR控制台应用程序的成员

Joh*_*ohn 2 c# translation c++-cli dllimport static-classes

我有以下内容,我不能转移围绕DllImport的错误

#include "stdafx.h"
#include <msclr/auto_gcroot.h>

using namespace System;
using namespace System::Diagnostics;
using namespace System::Runtime::InteropServices;
using namespace System::Threading;
using namespace System::Collections::Generic;
using namespace System::Text;

namespace WinFlix
{
    class FlickWin
    {
        [DllImport("user32.dll")]
        extern "C" bool SetForegroundWindow(IntPtr hWnd);
Run Code Online (Sandbox Code Playgroud)

我一直在从C#转换这个类,它是一个static类,在C++ .NET中不可用.我的新C++项目是"CLR控制台应用程序"类型.

我明白了

错误C2059:语法错误:'string'

错误C2238:';'之前的意外标记

都指的是'extern"C"'行.

我已经搜索过我之前的工作,虽然我能胜任C++/CLI,但我之前不必调用这样的WinAPI函数.这两个错误都是在打我: - /

TBH,这件事耗尽了我的耐心而我删除了它,可以回去重新创建它,但我更喜欢修复我的C#而不是.尽管如此,请帮助赞赏以供参考

Dav*_*nan 6

外部"C"不适合DllImport.这是错误的根源.

问题是你在一个类中声明你的P/invoke.据我所知,在C++中,它们应该被声明为任何类之外的自由函数.我没有从C++/CLI找到很多关于P/invoke的文档,可能是因为C++/CLI不需要P/invoke.

您不需要使用C++/CLI进行P/invoke,因为编译器可以包含标准C++头文件并链接到本机库.只需包含windows.h并无需进一步调用Win32 API即可.这是C++/CLI的最佳点之一.