我正在C#中调用JordanIdCardReader.dll,一切听起来不错,下面是C#中的代码。
如何在VBA MS Access中调用此dll文件?
我知道我必须按以下方式使用Declare
关键字
Public Declare Function test1 Lib "C:\Windows\System32\JordanIdCardReader.dll" (ByRef card_no As String) As String
但是我不知道如何向其声明参数?有帮助吗?
CardReader reader = new CardReader();
CardInfo cardInfo = reader.Read(Card_no.Text);
txtFirstName.Text = cardInfo.FirstNameEn;
txtMiddleName.Text = cardInfo.MiddleNameEn;
txtFamilyName.Text = cardInfo.LastNameEn;
txtNameAR.Text = cardInfo.FullNameAr;
txtPhoneNum.Text = cardInfo.MobileNumber;
txtMobNum.Text = cardInfo.PhoneNumber;
txtBirthDate.Text = cardInfo.DateOfBirth;
txtAddress1.Text = cardInfo.Address1;
txtAddress2.Text = cardInfo.Address2;
txtCity.Text = cardInfo.City;
txtID.Text = cardInfo.IdNumber;
txtExpiryDate.Text = cardInfo.ExpiryDate;
txtNationalID.Text = cardInfo.NationalId;
txtIssuePlace.Text = cardInfo.IssuePlace;
txtGender.Text = cardInfo.Gender;
txtMotherName.Text = cardInfo.MotherName;
txtAddress.Text = cardInfo.Address;
txtCivilNum.Text = cardInfo.CivilNumber;
txtCivilOffic.Text = cardInfo.CivilOffice;
如果该.dll是托管的.net代码,则无法通过使用公共decleare +该.dll的路径将.dll作为Access中的非托管.dll使用。
Access中的那种.dll引用仅允许使用Win32位.dll,而不是托管的.dll。如果您将.net中的.dll作为简单的程序集引用使用,则该.dll是.net唯一的.dll,并且只能从.net使用。
但是,您可以在.net中创建一个类,引用该程序集,然后将.net类编译为COM对象。然后,Access可以自由使用该COM对象。您必须“注册”该COM对象,然后从VBA中转到tools-> references并添加该引用(或使用后期绑定)。
所以Access可以使用两种类型的外部库。 COM对象就像您在Access中使用单词或其他第三方.dll一样。这实际上是基于ActiveX或我们通常称为“ COM”对象的。因此,您可以创建一个.net类,并将该.net .dll公开为COM对象。实际上,只有很少的几行代码可以做到这一点。
使用VBA声明+ .dll的路径仅适用于标准Windows c ++(可能还有VB6)创建的.dll。因此,这些只是纯非托管(非.net)代码库,您可以从Access调用+使用。请勿将这种.dll类型与COM类型的外部库混淆(如前所述,这意味着需要VBA工具->引用中的VBA引用)。
如果您有对.net示例的引用或链接,那么我将在.net中发布一小段示例代码,使您可以使用Access中的.dll。