1.调用约定
stdcall 、 cdecl、 fastcall等等
这个用来指定参数传递顺序和函数返回时栈的清除方式。
可以通过以下
[AttributeUsage(AttributeTargets.Method)]
public class DllImportAttribute: System.Attribute
{
public DllImportAttribute(string dllName) {…} //定位参数为dllName
public CallingConvention CallingConvention; //入口点调用约定
public CharSet CharSet; //入口点采用的字符接
public string EntryPoint; //入口点名称
public bool ExactSpelling; //是否必须与指示的入口点拼写完全一致,默认false
public bool PreserveSig; //方法的签名是被保留还是被转换
public bool SetLastError; //FindLastError方法的返回值保存在这里
public string Value { get {…} }
}
属性指定调用约定和字符集等等。
2.开启x64支持
这个很容易更改,vs正常是win32 release、debug,可以新建x64 release、debug即可。
3.基本数据类型的传递
互调过程中,最基本要传递的无非是数值和字符,即:int,long,float,char等等,但是此类型非彼类型,C/C++与C#中有一些数据类型长度是不一样的,下表中列出常见数据类型的异同:
C/C++ |
C# |
长度 |
short |
short |
2Bytes |