如何从ms Access调用dll?

问题描述 投票:0回答:1

我正在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;
vba ms-access dll
1个回答
0
投票

如果该.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。

© www.soinside.com 2019 - 2024. All rights reserved.