这可能是由C#.NET编写Win32 .dll文件吗?

这可能是由C#.NET编写Win32 .dll文件吗? 如果是的话,我可以在哪里找到一些教程? 如果不是,那么您对Win32 .DLLs的建议是什么?

谢谢。

听起来你正试图用Win32风格的导出创建一个经典的Win32 DLL? (Win32风格的导出是DllImport选择的。)你不能用托管代码(C#或托管C ++)做到这一点。 据我所知,你需要使用非托管C / C ++来做到这一点。

Charles Petzold编写的Windows或类似的Win32编程书可能是一个很好的起点; 或者找一个’hello world’Win32 DLL示例。 或者只是在Visual Studio中创建一个Win32 DLL项目并查看它为您创建的文件,可能应该有一些占位符文本来帮助您入门。

托管代码确实使用也具有.dll作为扩展名的文件,但它们实际上是托管代码的容器,并且没有Win32样式的入口点,因此其他期望Win32入口点的代码无法使用它们。 它们有时被称为“托管组件”而不是dll以避免混淆。

更新 – 可能有一个备用选项:您可以创建所谓的“混合模式DLL” ,它是一个包含本机代码和托管代码的DLL。 然后,此DLL可以具有您要“导出”的托管C#类,以及导出Win32样式API的少量混合C / C ++。 虽然这是可能的,但它不一定是好事:希望加载普通Win32 DLL的代码可能不会期望加载CLR作为结果; 如果进程已经加载了已冲突的CLR版本,您可能遇到问题。 混合模式DLL对于允许C#程序集重用C / C ++代码更有用,而不是允许C#/托管代码伪装成Win32 DLL。

对的,这是可能的。 事实上,有一个工具。 它在Rainmeter应用程序中有点隐藏。

Rainmeter SDK for C#包含一个名为CS_DLL_FOR_C.exe的可执行文件,它将公共静态方法转换为可由本机应用程序调用的外部函数。 事实上,Rainmetere本身是用C ++开发的,并通过LoadLibrary加载插件

您可以使用以下链接下载此工具的x86和x64版本

x86版本

x64版本

PS:我不知道是否违反了Rainmeter的许可证来分发这个工具。

您可以将您编写的任何.NET程序集公开为com对象。

请参阅这些教程 (适用于VS 2003,但仍然有效)。

当然,您可以使用C#创建DLL文件。

您只需在Visual Studio中创建新项目时在项目类型中选择类库。

这是一个教程: http : //www.c-sharpcorner.com/uploadfile/mahesh/dll12222005064058am/dll.aspx