I received an C# DLL to access an API and another C# to invoke the DLL. I'm trying to make an ABL program to INVOKE the DLL. Ive tried the USING, also run it as an EXTERNAL but no luck. Never used C#, but it looks like a very simple program can't find how to instatiate the DLL from ABL. Thanks in advance, Hugo Here is the C# code, will appreciate any help Code: using System; using System.Windows.Forms; namespace CayanConnectSample { public partial class MainFrm : Form { public MainFrm() { InitializeComponent(); } private string merchantName = "Test Dynamic Payments"; private string merchantSiteId = "2Q5JSJH3"; private string merchantKey = "GQPXT-GTJTP-66A1Y-RWT5G-CNULU"; private string terminalIPAddress = "192.168.1.32"; //ip address in CDI Technologies private int requestTimeout = 60; private void btnCreateTransaction_Click(object sender, EventArgs e) { decimal amount = Convert.ToDecimal(0.09); string clerkId = "MIKE"; //only transactionType used are sale & refund CayanConnect.CreateTransaction.Request request = new CayanConnect.CreateTransaction.Request() { MerchantName = merchantName, MerchantSiteId = merchantSiteId, MerchantKey = merchantKey, TransactionType = CayanConnect.CreateTransaction.TransactionTypeEnum.SALE, ClerkId = clerkId, Dba = merchantName, Amount = amount, //[Amount] is always positive. TransactionType has the sign. Sale or Refund OrderNumber = "1234" }; CayanConnect.CreateTransaction createTrx = new CayanConnect.CreateTransaction(); CayanConnect.CreateTransaction.Response ctr = createTrx.Process(request, CayanConnect.ThemeEnum.None); if (ctr.Success) { CayanConnect.InitiateTransaction it = new CayanConnect.InitiateTransaction(terminalIPAddress, ctr.TransportKey, null, CayanConnect.ThemeEnum.None, "Waiting for customer..."); CayanConnect.InitiateTransaction.Response response = it.Process(requestTimeout, true); string emvDetail = response.EMVDetail; bool approved = false; if (response.Success) { //THERE IS NO TIMEOUT OR ERROR CALLING THE SERVICE if (response.Status.ToUpper() == "APPROVED") { //AN AMOUNT HAS BEEN APPROVED if (Convert.ToDecimal(Math.Abs(amount)) == response.AmountApproved) { //FULL AMOUNT APPROVED approved = true; txtResponse.Text = "Good to go!!"; } else { //PARTIALLY APPROVED, HAS TO VOID THIS string v = this.VoidApprovedTransaction(response.Token); string em = v.IsEmpty() ? "Transaction was voided succesfully." : v; txtResponse.Text = $"Invalid approved amount.{Environment.NewLine}Amount: {amount.ToString("C")}{Environment.NewLine}Approved Amount: {response.AmountApproved.ToString("c")}{em}"; } } else { //AMOUNT WAS DECLINED txtResponse.Text = response.DeclinedMessage(amount); } } else { //THERE WAS A PROBLEM CALLING THE SERVICE txtResponse.Text = response.ErrorMessage; } } else { //THERE WAS A PROBLEM CALLING THE SERVICE txtResponse.Text = ctr.ErrorMessage; } } private string GetStatus() { string rt = string.Empty; CayanConnect.GetStatus status = new CayanConnect.GetStatus(this.terminalIPAddress, null, CayanConnect.ThemeEnum.None, "Verifying terminal status..."); CayanConnect.GetStatus.Response statusResponse = status.Process(this.requestTimeout); rt = statusResponse.ToXml(); return rt; } private string VoidApprovedTransaction(string token) { string rt = string.Empty; CayanConnect.Void _void = new CayanConnect.Void(); CayanConnect.Void.Request request = new CayanConnect.Void.Request() { MerchantName = this.merchantName, MerchantKey = this.merchantKey, MerchantSiteId = this.merchantSiteId, Token = token, Timeout = this.requestTimeout }; CayanConnect.Void.Response response = _void.Process(request, CayanConnect.ThemeEnum.None); if (!response.Success) { rt = $"Error voiding transaction.{Environment.NewLine}{Environment.NewLine}{response.ErrorMessage}"; } return rt; } private void btnIsOnLine_Click(object sender, EventArgs e) { txtResponse.Text = GetStatus(); } } } Continue reading...