2012-07-15 256 views
0

我有一個名爲OMGICardDll.dll DLL,它與USB插件智能卡設備讀取來自卡非託管的DLL

在這裏,數據通信是,我使用的代碼:

public partial class Form1 : Form 
{ 
    [DllImport("OMGICardDll",EntryPoint="ReadName",ExactSpelling=true, CallingConvention = CallingConvention.StdCall,SetLastError=false)] 
    public static extern string ReadName(); 
    //Form1 fm = new Form1(); 
    public Form1() 
    { 
     InitializeComponent(); 
    } 

    private void Form1_Load(object sender, EventArgs e) 
    { 

    } 

    private void btnSave_Click(object sender, EventArgs e) 
    { 

     txtName.Text = ReadName(); 
    } 


} 

當我點擊保存按鈕,我發現System.EntryPointNotFoundException

+0

僅使用ExactSpelling如果你知道你在做什麼,用DUMPBIN.EXE /出口找到真正的名字。您無法按原樣調用此函數,當pinvoke編組器嘗試釋放返回的字符串時它會崩潰。返回類型必須是IntPtr,Marshal.PtrToStringAnsi()才能轉換。 – 2012-07-15 20:36:55

回答

1

該錯誤可能表明OMGICardDll.dll可以找到並加載,但該功能ReadName不存在它或者沒有從中導出。

你可以驗證程序拼寫正是這樣呢?並出口? (而實際上不叫ReadNameAReadNameW?)