Automation/OCX crash in unmanaged callback with string param
vidjense
Member Posts: 2
Hi.
I am writing an integration DLL (automation) in C# that loads an unmanaged 3rd party DLL.
The 3rd party dll is an integration dll used to communicate with a payment terminal.
Since this 3rd party DLL is written in unmanaged code, there is marshalling done while communication with this.
The solution works ok when testing it under a .Net test program in Visual Studio 2010
and also when testing it under Dynamics Nav Classic, but not for one function; Offline payment.
When testing for "offline" transaction on the payment terminal it crashes under Dynamics Nav Classic, but not under the .Net test program.
The running code is the same as for online (which is working under both Nav and .Net) but with one difference:
During offline payment a call back function that returns a string is called.
When control is returned to the 3rd party DLL from my code, Nav crashed.
Several other call back are also called and does not cause crash, but none of those call back function is returning a string.
This leads me to believe that there is a problem with the definition of the call back.
Any suggestions on why the code crashes under Dynamics Nav?
I am writing an integration DLL (automation) in C# that loads an unmanaged 3rd party DLL.
The 3rd party dll is an integration dll used to communicate with a payment terminal.
Since this 3rd party DLL is written in unmanaged code, there is marshalling done while communication with this.
The solution works ok when testing it under a .Net test program in Visual Studio 2010
and also when testing it under Dynamics Nav Classic, but not for one function; Offline payment.
When testing for "offline" transaction on the payment terminal it crashes under Dynamics Nav Classic, but not under the .Net test program.
The running code is the same as for online (which is working under both Nav and .Net) but with one difference:
During offline payment a call back function that returns a string is called.
When control is returned to the 3rd party DLL from my code, Nav crashed.
Several other call back are also called and does not cause crash, but none of those call back function is returning a string.
This leads me to believe that there is a problem with the definition of the call back.
[DllImport("flxdrv.dll", EntryPoint = "_flxInitCallbackVB@8", ExactSpelling = true, CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
public static extern void flxInitCallback(FLX_CALLBACK methodId, PcbStopListDelegate del);
public delegate void PcbStopListDelegate([MarshalAs(UnmanagedType.BStr)]ref String code, ref int rc);
PcbStopListDelegate pcbStopListDelegate;
public void Flx_RegisterCallBacks()
{
pcbStopListDelegate = new PcbStopListDelegate(PcbStopList);
flxInitCallback(FLX_CALLBACK.FLX_CALLBACK_STOPLIST, pcbStopListDelegate);
}
private void PcbStopList(ref String code, ref int rc)
{
code = "123456,00";
rc = 1;
return;
}
Any suggestions on why the code crashes under Dynamics Nav?
_______
Vidar
Vidar
0
Categories
- All Categories
- 73 General
- 73 Announcements
- 66.6K Microsoft Dynamics NAV
- 18.7K NAV Three Tier
- 38.4K NAV/Navision Classic Client
- 3.6K Navision Attain
- 2.4K Navision Financials
- 116 Navision DOS
- 851 Navision e-Commerce
- 1K NAV Tips & Tricks
- 772 NAV Dutch speaking only
- 617 NAV Courses, Exams & Certification
- 2K Microsoft Dynamics-Other
- 1.5K Dynamics AX
- 322 Dynamics CRM
- 111 Dynamics GP
- 10 Dynamics SL
- 1.5K Other
- 990 SQL General
- 383 SQL Performance
- 34 SQL Tips & Tricks
- 35 Design Patterns (General & Best Practices)
- 1 Architectural Patterns
- 10 Design Patterns
- 5 Implementation Patterns
- 53 3rd Party Products, Services & Events
- 1.6K General
- 1.1K General Chat
- 1.6K Website
- 83 Testing
- 1.2K Download section
- 23 How Tos section
- 252 Feedback
- 12 NAV TechDays 2013 Sessions
- 13 NAV TechDays 2012 Sessions