有沒有簡單的方法來創建一個Visual Studio解決方案,其中包含兩個項目 - 第一個創建.dll的ml64程序集和第二個調用.dll中的方法的C#程序?C#如何在沒有中間C++層的情況下直接調用ml64 dll?
例如:
ml64代碼文件div.asm:
.code
; ulong Divide (ref ulong rem, ulong dividend_low, ulong divisor)
; sets rem to (rem*2^64 + dividend_low) mod divisor
; return floor((rem*2^64 + dividend_low)/divisor)
; assume &rem in rcx, dividend_low in rdx, divisor in r8
Divide proc
mov rax,rdx
mov rdx,qword ptr [rcx]
cmp rdx,r8
jae ovfl
div r8
mov qword ptr [rcx],rdx
ovfl:
ret
Divide endp
end
C#代碼文件main.cs:
using System;
using System.Runtime.InteropServices; // DLL support
class HelloWorld
{
[DllImport("div.dll")]
public static extern ulong Divide (ref ulong rem, ulong dividend_low,
ulong divisor);
static void Main()
{
Console.WriteLine ("This is C# program");
long quot, rem = 3, dividend_low = 1, divisor = 20;
Console.WriteLine("divide (3 * 2^64 + 1) by 20");
quot = Divide(ref rem, dividend_low, divisor);
Console.WriteLine("quotient = {0}, remainder = {1}", quot, rem);
}
}
我想要這樣做不訴諸於中間如果可能的話,在C++層。 需要在VS中設置什麼設置? C#代碼是否需要使用PInvoke?如果是這樣如何?
您的代碼是否工作?如果不是,它是做什麼的?你確定你的程序集遵循[StdCall調用約定](http://msdn.microsoft.com/en-us/library/system.runtime.interopservices.callingconvention)嗎? (我不知道有足夠的程序集來驗證。) – svick