Hi there,
I'm new to C# (but not to C++), and I'm trying to create a web service that
calls some of our older software, located in a DLL. I'm getting most the
calls to work ok, but one of them needs a callback into the managed code. I
thought I had it all worked out, but it seems like when the callback is
getting hit, things might be going out of scope and crashing the app.
Here's my little web service function; I hacked out a bunch of other stuff
for brevity, but the general idea is, I call the "Initialize " function,
providing a callback to the DLL so the DLL can call me when certain
operations in the "LoginUser2 " complete.
You can see where I tried to keep the callback around in a session object,
but, being a novice, I'm not sure this is the right approach. Essentially, I
need this callback alive for the whole life of the user's session.
[WebMethod(Enabl eSession = true)]
public string HelloArguments( string sLogin, string sPassword)
{
Test.TNInitiali zeCallbackType cb = new
Test.TNInitiali zeCallbackType( Test.TNAPICallb ack);
Session["Callback"] = cb;
hWho = Test.Initialize (cb);
result2 = Test.LogonUser2 (hWho, sLogin, sPassword);
return sResult;
}
and some defs:
class Test
{
[DllImport("mydl l.dll")]
public static extern Int32 LogonUser2(IntP tr hWho, string pszLogin,
string pszPassword);
public delegate IntPtr TNInitializeCal lbackType(IntPt r hWho, Int32
a1, Int32 a2, Int32 a3);
[DllImport("mydl l.dll")]
public static extern IntPtr Initialize(TNIn itializeCallbac kType
callback);
public static IntPtr TNAPICallback(I ntPtr hWho, Int32 a1, Int32 a2,
Int32 a3)
{
return (IntPtr)0;
}
Thanks for any help or pointers as to where I can read up on this.
I'm new to C# (but not to C++), and I'm trying to create a web service that
calls some of our older software, located in a DLL. I'm getting most the
calls to work ok, but one of them needs a callback into the managed code. I
thought I had it all worked out, but it seems like when the callback is
getting hit, things might be going out of scope and crashing the app.
Here's my little web service function; I hacked out a bunch of other stuff
for brevity, but the general idea is, I call the "Initialize " function,
providing a callback to the DLL so the DLL can call me when certain
operations in the "LoginUser2 " complete.
You can see where I tried to keep the callback around in a session object,
but, being a novice, I'm not sure this is the right approach. Essentially, I
need this callback alive for the whole life of the user's session.
[WebMethod(Enabl eSession = true)]
public string HelloArguments( string sLogin, string sPassword)
{
Test.TNInitiali zeCallbackType cb = new
Test.TNInitiali zeCallbackType( Test.TNAPICallb ack);
Session["Callback"] = cb;
hWho = Test.Initialize (cb);
result2 = Test.LogonUser2 (hWho, sLogin, sPassword);
return sResult;
}
and some defs:
class Test
{
[DllImport("mydl l.dll")]
public static extern Int32 LogonUser2(IntP tr hWho, string pszLogin,
string pszPassword);
public delegate IntPtr TNInitializeCal lbackType(IntPt r hWho, Int32
a1, Int32 a2, Int32 a3);
[DllImport("mydl l.dll")]
public static extern IntPtr Initialize(TNIn itializeCallbac kType
callback);
public static IntPtr TNAPICallback(I ntPtr hWho, Int32 a1, Int32 a2,
Int32 a3)
{
return (IntPtr)0;
}
Thanks for any help or pointers as to where I can read up on this.
Comment