PowerShell-4.API调用以及DLL调用
2016-12-14 20:01
381 查看
PowerShell可以直接调用API,So...这东西完全和cmd不是一回事了...
调用API的时候几乎和C#一样(注意堆栈平衡):
调用MessageBox:
$iii = Add-Type -memberDefinition @"
[DllImport("User32")]
public static extern int MessageBox (
long hWnd,
string lpText,
string lpCaption,
int uType);
"@ -passthru -name XXX
$iii::MessageBox(0 ,'test' ,'tit' ,0)
PowerShell 调用我们自己的dll
(下面是网上粘贴的别人的,我本意是要调用C++的dll,但是按照C#的姿势调用失败了,现在采取的方案是通过rundll32来桥接PowerShell调用C++的dll。)
用C#写一段代码编译为DLL文件
namespace Math{
public class Methods {
public Methods() {
}
public static int CompareI(int a, int b) {
if (a>b)
return a;
else
return b;
}
public int CompareII(int a, int b) {
if (a>b)
return a;
else
return b;
}
}
}
[void][reflection.assembly]::LoadFile("G:/Math2.dll")
[Math.methods]::CompareI(10,2)
$a=New-Object Math.Methods
$a.CompareII(2,3)
[void][reflection.assembly]::LoadFile("D:/VS2008/VC/Math2.dll")
我们必须以这种形式加载DLL库
[Math.methods]::CompareI(10,2)
我们看到Powershell在调用静态方法的时候必须使用方括号加上双冒号“::”的形式来调用静态方法。
$a=New-Object Math.Methods
$a.CompareII(2,3)
而一般方法则不然,必须用New-Object来声明一个对象引用。
调用API的时候几乎和C#一样(注意堆栈平衡):
调用MessageBox:
$iii = Add-Type -memberDefinition @"
[DllImport("User32")]
public static extern int MessageBox (
long hWnd,
string lpText,
string lpCaption,
int uType);
"@ -passthru -name XXX
$iii::MessageBox(0 ,'test' ,'tit' ,0)
PowerShell 调用我们自己的dll
(下面是网上粘贴的别人的,我本意是要调用C++的dll,但是按照C#的姿势调用失败了,现在采取的方案是通过rundll32来桥接PowerShell调用C++的dll。)
用C#写一段代码编译为DLL文件
namespace Math{
public class Methods {
public Methods() {
}
public static int CompareI(int a, int b) {
if (a>b)
return a;
else
return b;
}
public int CompareII(int a, int b) {
if (a>b)
return a;
else
return b;
}
}
}
[void][reflection.assembly]::LoadFile("G:/Math2.dll")
[Math.methods]::CompareI(10,2)
$a=New-Object Math.Methods
$a.CompareII(2,3)
[void][reflection.assembly]::LoadFile("D:/VS2008/VC/Math2.dll")
我们必须以这种形式加载DLL库
[Math.methods]::CompareI(10,2)
我们看到Powershell在调用静态方法的时候必须使用方括号加上双冒号“::”的形式来调用静态方法。
$a=New-Object Math.Methods
$a.CompareII(2,3)
而一般方法则不然,必须用New-Object来声明一个对象引用。
相关文章推荐
- stdcall 以及 其他的dll调用方式
- 图片保存到dll中以及调用
- 用VC开发API形式的DLL给VB调用的范例
- c++builder调用VC的dll以及VC调用c++builder的dll
- [转]c++builder调用VC的dll以及VC调用c++builder的dll
- 用VC开发API形式的DLL给VB调用的范例
- 图片保存到dll中以及调用
- vc6中COM对Dll的包装以及对COM的调用
- __declspec(dllimport)和__declspec(dllexport)的区别,以及有关c/c++调用约定
- __declspec(dllimport)和__declspec(dllexport)的区别,以及有关c/c++调用约定
- c++builder调用VC的dll以及VC调用c++builder的dll
- vc 创建dll文件以及dll调用
- C++Builder调用VC的dll以及VC调用C++Builder的dll
- JS调用ATL DLL 以及 去掉ActiveX 控件安全提示
- c#调用API 和c++dll的参数问题
- WinPcap中Pocket.dll里的PacketGetAdapterNames这个API在C#里面的调用
- __declspec(dllimport)和__declspec(dllexport)的区别,以及有关c/c++调用约定
- yesry 通过桥接器,Java调用任何API或DLL
- C# 调用API,实现注销远程登录本机的用户 以及 远程登录用户获得自己用户名(转+原);
- 关于“无法显式调用运算符或访问器”的问题以及Reflector反编译dll文件再生成dll文件的问题