我寫了下面C++
代碼來創建win 32 Dynamic link library
:收到錯誤,以PInvoke的函數調用不平衡棧
#include <windows.h>
#include <some.h>
unsigned char m_KSN[10];
unsigned char m_inintial_key[16];
unsigned char initial_key[16];
extern "C" __declspec(dllexport) unsigned char* OnDecryption(LPCTSTR stringKSN,
LPCTSTR BDK){
for(i=0;i<10;i++){
m_KSN[i]=asctohex(stringKSN[2*i],stringKSN[2*i+1]); }
for(i=0;i<16;i++){
m_inintial_key[i]=asctohex(BDK[2*i],BDK[2*i+1]);}
GetInitalKey(m_KSN, m_inintial_key, initial_key);
// GetInitialKey function written in `.lib` file. Data type of (Byte*a Byte* b Byte* c)
return initial_key;
}
凡爲我的C#
代碼:
static class DecryptionDll
{
public String BDK = "0111111119ABCDEFFEDCBA9877777777";
public String KSN = "62994900380000C00329";
internal static class UnsafeNativeMethods
{
const string _dllLocation = "finalTest.dll";
[DllImport(_dllLocation)]
public static extern byte OnDecryption(string ksn, String bdk);
}
}
我把dll
文件在我目前的目錄中,我通過以下命令得到:
String path = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.
GetExecutingAssembly().Location);
它顯示我my debug
文件夾是當前路徑。所以我把dll
放在那裏。我也得到了很多帖子,但無法理解PInvoke
的情況。 請幫助我..
請告訴我,我應該怎麼做改變c++
或c#
代碼來調用寫在dll
方法。
我非常抱歉有這麼多的修改。它發生是因爲我的連接速度慢
可能是'cdecl'與'stdcall'問題。 – CodesInChaos
您需要確保雙方的呼叫約定相符。無論是在C代碼和'CallingConvention = CallingConvention.Cdecl'在p添加'__cdecl' /調用屬性,否則'__stdcall1'和'CallingConvention = CallingConvetion.StdCall'。 –
@BenVoigt我應該在extern「C」__declspec(dllexport)之後添加_cdecl嗎? –