I have code that needs to pinvoke ac dll, it seems to me that this code should implement idisposible since it touches unmanaged code. I could be wrong so please correct me if this is not true.
Reading up on the stuff it seems like I should use safehandles. Great. Except my dll doesn't return any handles, or intptr. So now what?
The signatures are mostly like the following:
HRESULT _XYZFN XYZNewTrip (Trip *pTripID);
Argument Values:
pTripID: pointer to a 4 byte integer in which the new Trip handle will be placed
Can I some how shoehorn a safehandle in there? It seems like maybe the hard case from this article .
If it doesn't return an handle, then clearly you can't deallocate anything, so the IDisposable
pattern would be useless.
Only thing:
pTripID: pointer to a 4 byte integer in which the new Trip handle will be placed
These pTripID
how will you deallocate them? Probably there is a
void XYZFreeTrip(Trip tripID);
In this case, you'll have to collect all the tripID
you get and free them in the IDisposable
.
Now if Trip
is an handle, then you have two options:
Your code is x86 only (because for example the PInvoke DLL is x86 only): sizeof(int) == sizeof(int*) == IntPtr.Size
, so you can use the Wrapping Unmanaged Resources - Defining Level 0 Types for Pointers (The Intermediate Case)
Your code is x86 and x64: the Wrapping Unmanaged Resources - Defining Level 0 Types for Non-Pointer Data (The Hard Case) :-( (instead of ushort
you have a int
)
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.