我需要在Windows窗体应用程序中使用WinSparkle库。我有包含库头 - <winsparkle.h>
并已放置DLL导入代码。我想Dll导入代码是C#样式。如何将其转换为C++ .Net
样式?
// AutoUpdate.cpp : main project file.
#include "stdafx.h"
#include "Form1.h"
#include <winsparkle.h>
using System;
using System::Runtime::InteropServices;
using namespace AutoUpdate;
namespace AutoUpdate // YOUR NAMESPACE CAN GO HERE
{
**// C# lines**
class WinSparkle
{
// Note that some of these functions are not implemented by WinSparkle YET.
[DllImport("WinSparkle.dll", CallingConvention=CallingConvention.Cdecl)]
public static extern void win_sparkle_init();
[DllImport("WinSparkle.dll", CallingConvention=CallingConvention.Cdecl)]
public static extern void win_sparkle_cleanup();
[DllImport("WinSparkle.dll", CharSet=CharSet.Ansi, CallingConvention=CallingConvention.Cdecl)]
public static extern void win_sparkle_set_appcast_url(String url);
[DllImport("WinSparkle.dll", CharSet=CharSet.Unicode, CallingConvention=CallingConvention.Cdecl)]
public static extern void win_sparkle_set_app_details(String company_name,
String app_name,
String app_version);
[DllImport("WinSparkle.dll", CharSet=CharSet.Ansi, CallingConvention=CallingConvention.Cdecl)]
public static extern void win_sparkle_set_registry_path(String path);
[DllImport("WinSparkle.dll", CallingConvention=CallingConvention.Cdecl)]
public static extern void win_sparkle_check_update_with_ui();
}
}
[STAThreadAttribute]
int main(array<System::String ^> ^args)
{
// Enabling Windows XP visual effects before any controls are created
Application::EnableVisualStyles();
Application::SetCompatibleTextRenderingDefault(false);
// Create the main window and run it
Application::Run(gcnew Form1());
return 0;
}
答案 0 :(得分:0)
你似乎在这里感到有些困惑。
您当然可以使用混合模式C ++ / CLI程序集来完成此操作。您将包含头文件并将lib文件传递给链接器。然后你可以直接调用这些函数,因为它们是在头文件中声明的。您需要从C ++ / CLI程序集调用函数,或者通过托管的ref类公开所需的任何内容以供C#代码使用。
但是,您链接到的文档并未建议此路线。它建议根本没有C ++ / CLI和纯C#p / invoke解决方案。这似乎是最简单的方法。
我建议您删除C ++ / CLI层,而是使用纯C#p / invoke。请严格遵循您链接的说明。从标题为托管代码/ .NET / C#应用程序的部分开始。