在VS2008以及VS2010里,加载PInvoke

使用平台调用(PInvoke)实现C#调用非托管C++代码 1.问题描述众所周知,不同的语言有不同的优势,如何让不同的语言在一个程序中“各司其职”、“分工协作”一直是一个人们想要达到的目标。有许多时候,我们需要用C#语言调用C++语言写成的代码:一方面,C#在编写GUI时更加方便(因为有WPF),而C++的执行效率之高是实现许多复杂算法的首选语言;另一方面,许多既有代码是通过C++语言编写的(各种库,甚至Win32API),我们也有在C#中重用既有C++代码 阅读详情

對於時不時需要在 VB/C# 裡面塞入一些 Win32 API 功能的程式設計師而言, PInvoke.Net 是一個非常好用的工具 (它甚至被 MSDN 雜誌評選為最需要被安裝的十個 VS Addin 之一)。可惜的是, 雖然這個工具完全支援 VS2003/2005, 它似乎並不認識 VS2008 及 VS2010 (即使 VS2008/2010 都已經上市那麼久了)。

如果要讓它在 VS2008 上能夠使用, 你可以按照以下的步驟來做:

1. 首先, 在 %programfiles%\red gate\PInvoke.NET 子目錄下面找到 PInvokeDotNetAddIn.Addin 這個檔案, 以 NotePad 開啟它。

2. 在這個檔案中找到最後一個 </HostApplication> 標記, 然後把以下這一段插入其下方 (記得存檔):

<HostApplication>
     <Name>Microsoft Visual Studio Macros</Name>
     <Version>9.0</Version>
</HostApplication>
<HostApplication>
     <Name>Microsoft Visual Studio</Name>
     <Version>9.0</Version>
</HostApplication>

3. 打開 VS2008, 開啟 【工具】 選單, 再選擇 【选项】,找到 【环境】中的【Add-in/Macro Security】 項目, 把 PInvoke.Net Addin 的安裝子目錄路徑 (C:\Program Files\Red Gate\PInvoke.NET) 加進列表裡面。

4. 重新開啟 VS2008, 你就可以在選單上找到 PInvoke.Net 項目了。在程式碼畫面中, 從該選單中選擇 Insert PInvoke Signatures 就行了。

對於 VS2010, 方法一樣, 但是要把上面 <Version>9.0</Version> 字樣改為 <Version>10.0</Version> 即可。

要使用 PInvoke.Net, 你可以在視窗上方輸入你想要查詢的 Win32 函式, 例如 "InternetOpen", 然後按下 Search 按鈕。如果找到的話, 你就可以在右邊視窗中看到對應的程式碼。不過, 並不是每個 Win32 API 都能找到對應的 C#/VB 碼; 有很多時候, 如果找不到可用的程式碼, 那麼可以按右下角視窗裡面的 Go To Function on PInvoke.Net 連結, 連到官方網站中繼續查詢。它的官網製作得如同 Wiki 一般, 你無需註冊就可以提供建議

 

VS PInvoke插件 RedGate.PInvokeExtension VS平台调用插件 PInvoke.NET 最新 最全 PInvoke插件 RedGate.PInvokeExtension VS平台调用插件 PInvoke 平台调用 调用C++ 调用系统 C#调C++, Search Module: Directory Constants Delegates Enums Interfaces Structures Desktop Functions: advapi32 avifil32 cards cfgmgr32 comctl32 comdlg32 credui crypt32 dbghelp dbghlp dbghlp32 dhcpsapi difxapi dmcl40 dnsapi dtl dwmapi faultrep fbwflib fltlib fwpuclnt gdi32 gdiplus getuname glu32 glut32 gsapi hhctrl hid hlink httpapi icmp imm32 iphlpapi iprop irprops kernel32 mapi32 MinCore mpr mqrt mscorsn msdelta msdrm msi msports msvcrt ncrypt netapi32 ntdll ntdsapi odbc32 odbccp32 ole32 oleacc oleaut32 opengl32 pdh powrprof printui propsys psapi pstorec query quickusb rasapi32 rpcrt4 scarddlg secur32 setupapi shell32 shlwapi twain_32 unicows urlmon user32 userenv uxtheme version wer wevtapi winfax winhttp wininet winmm winscard winspool wintrust winusb wlanapi ws2_32 wtsapi32 xolehlp xpsprint Smart Device Functions: aygshell coredll ipaqutil rapi Glossary distributed computing LibHolocaust Marshaling Marshalling Marshalling PInvoke test pinvoke Show Recent Changes Subscribe (RSS) Misc. Pages Comments FAQ Helpful Tools Playground Suggested Reading Website TODO List Support Forum Download Visual Studio Add-In Terms of Use Privacy Policy Create page PInvoke (glossary) Summary The mechanism provided by the CLR that enables managed code to call static DLL exports. Access PInvoke.net directly from VS: Terms of Use Edit This Page Find References Show Printable Version Revisions Show changes 立即下载

相关推荐

PInvoke.net官方提供的VS API插件

PInvoke.net官网提供的VS IDE下的API查询插件(目前支持VS2010VS2012,VS2013),使用此插件让您方便的查询使用来自最权威的Pinvoke.net 提供的API

PInvoke.NET Visual Studio 插件

大家知道,在.NET中有时会是用一些非托管代码,或者调用一些Win32 API。这个可以通过.NET 的 Platform Invoke(PInvoke)机制来完成。但是PInvoke 需要程序员自己来提供函数声明,这点比较麻烦且有可能出错。PInvoke.NET 可以给程序员提供可靠的声明,这样你就不会再花费额外的精力和时间PInvoke.NET 是一个维基,是用来让开发者们记录编辑一些PI

flanker base @ CSDN 2428

《精通.NET互操作:pinvoke, c++ interop和COM interop》全部源代码

《精通.NET互操作:pinvoke, c++ interop和COM interop》全部源代码

vs2019 使用unicode_使用PInvoke互操作,让C#和C++愉快的交互优势互补

一:背景 1. 讲故事 如果你常翻看FCL的源码,你会发现这面有不少方法借助了C/C++的力量让C#更快更强悍,如下所示: [DllImport("QCall", CharSet = CharSet.Unicode)] [SecurityCritical] [SuppressUnmanagedCodeSecurity] private static extern ...

weixin_42244017的博客 250

VS2010中VB.NET中API函数的调用

API有两种调用方式: 第一种使用declare的API调用, Declare Function publicname Lib "libname" [Alias "alias"]      [([[ByVal] variable [As type]      [,[ByVal] variable [As type]]...])] As Type  其中 function表示有返回值,也可

u014050788的专栏 4578

手把手教你PInvoke

当你写久了应用层代码,是不是需要来玩一下硬件呀? 这个时候你就会接触到一些美妙的dll,比如user32.dll,kernal32.dll 当然这些是非托管的代码,我们在.net中无法直接使用,所以我们会需要使用PInvoke进行调用 于是你会使用DllImport特性标记一个方法,引入非托管函数 比如 我们希望弹出一个消息框,就会使用下面这个函数,添加DllImport特性,表明从哪个dll...

黄腾霄的博客 4078

PInvoke.net不支持vs2008了!

PInvoke.net以插件的形式安装在visual studio中,刚看了一下,明显少了2008,晕!再想想办法 , 二个dll没什么好研究的,除非去Reflector去研究,先打开 PInvokeDotNetAddIn.AddIn,发现全是xml数据<?xmlversion="1.0"encoding="UTF-16"standalone="no"?><Extensi...

weixin_30834019的博客 146

C#通过PInvoke调用c++函数的备忘录的实例详解

主要介绍了C#通过PInvoke调用c++函数的备忘录的实例以及相关知识点内容,有兴趣的朋友们学习下。

PInvoke.net Visual Studio Extension

https://visualstudiogallery.msdn.microsoft.com/9CA9D544-05D2-487B-AB49-31851483C1CC   http://www.pinvoke.net/

weixin_34289454的博客 326

vs2008使用pinvoke.net插件

英文原文:http://www.red-gate.com/supportcenter/GeneralContent.aspx?c=knowledgebase\PInvoke\KB200711000198.htm PInvoke.net add-in support for Visual Studio 2008 PInvoke.net目前安装版本只支持自动添加到vs.net2005,但你只需要在...

weixin_34150224的博客 167

VS 调用动态链接库 PInvokeStackImbalance 对 PInvoke 函数“ ”的调用导致堆栈不对称

当我们使用动态链接库的时候,有的时候会出现一个常见的这个错误,  原因通常说白了就是参数不匹配了。 通常会在声明出加上 CallingConvention= CallingConvention.Cdecl来声明 意味着参数的可变长度,大部分时候会解决这个问题 有的时候也会因为计算机程序位数的不同, 比如开发32位程序,  在C中参数虽然是long  可相当于项目面的int  都占4字节 这

no1francis的专栏 2252

利用Visual Studio 2017的扩展开发(VSIX、ItemTemplate) 快速实现项目的半自动化搭建

目录 0.引言 1.什么是Visual Studio项目模板 2.IWizad接口 3.通过Visual Studio扩展开发实现领域驱动开发 3.1 使用VSIX+ProjectTemplate创建项目模板 3.2使用ItempTemplate创建自定义项模板 3.3实现可视化添加实体字段,自动生成应用层(Dto、IAppService、AppService)、领域层(Entity...

大龄Giser 7775

vs2010环境下,C#调用C++的dll过程中常见三大问题(内存损坏、托管调试堆栈不对称、调试dll)及解决方案

Problem1:C# 尝试读取或写入受保护的内存,这通常指示其他内存已损坏。System.AccessViolationException Solution1:dll项目中的函数声明:CPPDLLEXPORT_API void bayes(char* inFileName,float* Tex,int &amp;classifier); c#项目中的函数声明如下:[DllImport(@"....

cwang_running的博客 3082

科技中介如何高效匹配技术供需?.docx

科技中介如何高效匹配技术供需?

上一篇: html
下一篇: 在.NET(Java也适用的)环境下,如何执行字符串所代表方法名(函数名)
ccccffff
博客等级 码龄23年 1粉丝 2原创
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值