Use Unmanaged C++ Dll In .net?
Jan 8, 2010i need to pass commands through a C++ dll to vb.net and the other way around. is there some code that needs to be in the C++ dll to make it work? im not good at C++ at all,
View 5 Repliesi need to pass commands through a C++ dll to vb.net and the other way around. is there some code that needs to be in the C++ dll to make it work? im not good at C++ at all,
View 5 Repliesim trying to make a simple wrapper for lua. The only problem so far is that lua only accepts a method in a specific format.Delegate Function LuaC Function(ByVal lua_state As IntPtr) As Integer..That is how lua wants the method to look like. So it only accepts a function that looks like this: [code]
View 2 RepliesI created a vb.net dll called "WSdll.dll".I compiled it, created a type library (tlb), and registered it globally(gacutil)..It includes a file called wsutils.vb, which includes a namespace called "wsutils".In the namespace, there's an interface (with attribute) called "IWSconnection", and a class called "WSconnection".The interface and class are public, as are all methods and properties.[code]...
View 2 RepliesI have an application written in .NET 4.0 that needs to load in memory a native DLL (written C). At the moment I am using a P/Invoke call to LoadLibrary passing the path where the DLL is located. This works, but due to the fact that this DLL comes from a DB, I would like to know if it is possible loading it through a stream, avoiding then the necessity to store the DLL somewhere in the filesystem.
View 2 RepliesI have an application which has been succesfully installed on a number of different client machines.
The problem I now have is that I have been asked to allow third party applications, possibly written in a non .net language set to plug into my application and execute some of the code. Just a handfull of properties and half a dozen methods.
Now I can wrap up these properties/methods, make them public and have them in their own project which will be part of my solution but I have no idea where to go from here.
How do I make this portion of my application accessible to a third party application written in unmanaged code ?
Question: I use an embedded Firebird database in ASP.NET.
Now, Firebird has a .NET wrapper around native dlls.
The problem is, with the ASP.NET compilation and execution process, the dlls get shadow copied to a temporary folder. Unfortunately, only the .NET dlls, and not the native dll.
See [URL] for details.
Now, this makes it necessary to put the unmanaged dll somewhere into the system32 directory (or any other directory in the path environment variable).
Now, I want to change the wrapper/native dll (opensource), so it loads the dlls also if they are only in the bin folder.
Now, my problem is, how can I, in .NET, load an unmanaged dll from an absolute path ? The absolute path is determined at runtime, not at compile-time...
I have an unmanaged DLL and need to call one of its functions. Here's the [code]...
View 5 RepliesMaybe this is not true ... But how to connect an unmanaged DirectX to VB.NET? For anyone dll I use <DllImport()>, but Unmaged DirectX have interface.... Than I tried use "<ComImport(), Guid(...)...>", but I do not know how to use COM interfaces Maybe I did not really understand COM technolgy... I tried find documentation "how to use com interfaces", but found nothing.
View 1 RepliesI'm having some trouble finding the syntax for making function calls to unmanaged DLLs in VB.NET. Let's just assume there's a function "Connected" in unmanaged DLL "Connector.DLL". I want to call this function by creating an abstract function call to it.
I've seen some code out there that looks something like
[DllImport("Connector.DLL")]
Public Shared Function Connect(ByVal intPort)
But that syntax doesn't work for me.
I need to call a function in an unmanaged .dll written in C lang from vb.net. The function declaration looks like this [code]Now the behavior of this function is that it copies some data in argument "reply" and returns a numeric value which signals its pass/fail status. How do i pass it a string object so that it can copy data. Following is how i access this function.[code]When the call completes, returned status is absolutely fine but there is nothing in string "str". What is it that i am missing. I'm not sure about the string object that i am passing as argument.
View 3 RepliesI need to call a function in an unmanaged .dll written in C lang from vb.net. The function declaration looks like thisLONG _stdcall ReadInfo(char *reply);Now the behavior of this function is that it copies some data in argument "reply" and returns a numeric value which signals its pass/fail status. How do i pass it a string object so that it can copy data.Following is how i access this function.
View 2 RepliesI'm migrating some VB6 code to VB.net,the code contains a structure that contains 1d arrays, 2d arrays, and few other variables.The general outline of the Vb.net structure is as under
[code]...
The call to the dll is declared as under Public Declare Sub getState Lib "val.dll" (ByRef state As Test)Elsewhere on this site I realized that we have to "marshal" the structure to allow it to be compatible with the unmanaged code that is about to accept it.However I still receiving runtime errors when running the code, I don't have any clue of how to use the System.Runtime.InteropServices.Marshal class.What would be the correct way to pass this structure to the dll?EDIT: The original VB6 data type is
[code]...
What should be the VB signature for the unmanaged function void PopulateBSTR(BSTR outstring)?The function PopulateBSTR does a SysAllocString and populates the string. Note the unmanagaed signature has the argument BSTR and not BSTR*. I can marshal the BSTR string using IntPtr signature when the C++ signature has BSTR* as the argument.
(The unmanaged code is an external dll which I cannot modify but I need to use.)
I've read about this issue on MSDN and on CLR via c#.Imagine we have a 2Mb unmanaged HBITMAP allocated and a 8 bytes managed bitmap pointing to it. What's the point of telling the GC about it with AddMemoryPressure if it is never going to be able to make anything about the object, as it is allocated as unmanaged resource, thus, not susceptible to garbage collections?
View 3 RepliesI am trying to develop a dll in VisualStudio2005 in vb.net that will communicate with a spectrometer attached to the USB port of the computer.Now the dll exists in C++ and it works like a charm. It is unmanaged code.Now if I try to translate this code in VB.net (because our app is in VB and my boss wants it in VB for maintainability) I have problems.
First of all, I am trying to create a file to open that port. The code in C++ looks like below and it works. Needles to say I tried to call the C++ dll from our app and it works. If I call the vb dll it doesn't. It gives me "access denied" no matter what I tried. I am not sure if my CreateFile is wrong or it's .net. I read somewhere that I need a manifest file included in the dll? Has anyone experience something like this? Why would i get "ACCESS DENIED" all the time?
// close and clear current stuff
ClosePort();
swprintf( sDevice, L"\\?\usb#vid_0765&pid_%s#******#{%s}", Device, PRIVATE_IID_STR );
[code].....
I need to write a DLL in C that is used a plugin for an existing application.The DLL has to be compiled by the Visual Studio 2008 compiler with the following options.[code]It's then linked to applications library's.What it actually needs to do and what's causing me the issues is that within one of the methods it needs to pull data from a sql server 2008 r2. From what I've seen today you wouldn't be able to do this directly in C as SQL Server past 2005 is designed to communicate with CLR languages( C#, C++, VB.Net).It was suggested that I handle all the database communication with a VB.Net dll and then call said function from within the C dll. Most of what I've found on the topic of calling managed dll's from unmanaged code has talked about pinvoke or com wrappers and mainly from the perspective of c++.
View 2 RepliesI am using a function from a dll in unmanaged code that requires a callback to my managed code in Visual Basic 2010. The callback is asynchronous and is called continuously over the life of the application. What's the best way to protect the callback function from the garbage collector? Right now it is being collected after several dozen calls from the dll.
View 11 RepliesI am trying to get some data from a C Dll via a structure and I am getting incorrect values back. I tried a couple of examples I found but they do not work. Since I do not know the proper way. I do not know how to fix it. Can anyone give me any advice, hints, redirection or any assistance what-so-ever. I've been struggling with this for weeks.
View 3 RepliesI've been using a simple mouse hook and some accessiblity api stuff to retreive caption under mouse (ObjectFromPoint) and accessibility api for events (ObjectFromEvent).It seems like there is memory leaks with unmanaged callbacks.With the global mouse hook it seems there is 4 - 8k of ram added every time the mouse is just moved even though I only monitor mousedown and mouseup with:
Private Const WM_LBUTTONDOWN As UInteger = &H201
Private Const WM_LBUTTONUP As UInteger = &H202
Private Const WM_MBUTTONDOWN As UInteger = &H207
[code]....
And with accessibility it seems there is also memory issues with my code. Is this to do with delegates?I only managed to find one mention on the mouse hook issues which led me in to a dead end.A long shot and maybe not even needed but I was wondering, if these mem leaks can't be stopped, would it free up the memory if I used threads which could be exited and new ones started eg.mem usage 3000k of which 1000k is leaked mem (for round figures) I exit global mouse hook thread and start a new m-hook thread.would this free up the memory? If so, how would i do this, not use threading before.
I'm calling unmanaged C++ Dll function from VB.Net project by usin dllimport attribute like this;
<DllImport("Injection.dll", CallingConvention:=CallingConvention.Cdecl)> _
Private Shared Sub Injector(ByRef Client As String, ByRef Dll As String)
End Sub
I got this DLL functions explained in C++ as below :Void GetResultData(int pIndex,char pStrData[100][255], double pDoubleData[100])
View 2 Repliesin vb 2005 I used to be able to use unmanaged dlls by declaring their functions.But in vb 2010 it doesnt work.How is it done. The dlls i need to use vary, some made using delphi, some made using c++.
View 2 RepliesI am in the process of writing a tool to manage DHCP servers using the DHCP Server API. Its an unmanaged DLL so using it is a PITA at least for me it has been.Currently I am stuck trying to enumerate the IP ranges in a particular IP subnet. I am able to access an array of structures but I have only been able to access the first structure in the array of strucutres.Using this I can sucessfully access the first structure in the array.
Dim element_info_array As DHCP_SUBNET_ELEMENT_INFO_ARRAY
Dim element_data_ptr As LPDHCP_SUBNET_ELEMENT_DATA
...
element_data_ptr = DirectCast(element_info_array.Elements, LPDHCP_SUBNET_ELEMENT_DATA)
However when I use this to try and loop through them one at a time it does not work. The ptr returns 0 is null.
Dim element_info_array As DHCP_SUBNET_ELEMENT_INFO_ARRAY
Dim element_data_ptr As LPDHCP_SUBNET_ELEMENT_DATA
For i = 0 To size
[code]....
The sizeof for DHCP_SUBNET_ELEMENT_DATA could be off due incorrectly setting up the union structure for it. I was not sure how it define it so that only the first ElementType and one of the other components is avalible at any given time. It wont even read the first pointer though so that has not even come into play yet.
<StructLayout(LayoutKind.Sequential)> _
Public Structure DHCP_SUBNET_ELEMENT_DATA
Public ElementType As DHCP_SUBNET_ELEMENT_TYPE
[code]....
I really need little help with unmanaged dll access from VB.NET, have been working on it about a week. I have a C++ .h files with headers. I have to access one function from the dll using VB.NET:
int
acsGetEventPoll (int acsHandle,
void FAR*eventBuf,
unsigned short FAR*eventBufSize);
Documentation says that eventBuf is a buffer where structure of type CSTAEvent_t is put after the function call. Type is defined as:
[Code]...
Im creating an unmanaged DLL in Visual Studio 2010.In order to test my DLL I have created another project with Visual Basic and i've attached it to the solution.VB code calls to my InstallHook function in the DLL, passing a delegate of the callback function at VB. Then the DLL creates a hook and everytime a key is pressed the VB callback is called receiving the key and some other params as argument.
Well, the problem is that after some keys has been pressed, and the buffer in the VB callback reaches a specific size, the program crash. To be more specific, when the callback is called by the last time and it writes into its buffer in VB, it's like it overlaps in somewhere because the next time the callback is going to be called in the DLL, the program crash without reach the callback (the pointer in the dll is fine)I dont understand well the architecture of .Net and i dont know exactly what could be wrong, but im very confident in the code i've done and the problem should be something technical with the memory management in .Net.
Edit: I forgot to say that if I call the callback from within the VB code, then it works fine. The callback is normally called from a WndProc installed in the same window.
I am having a problem marshaling data between managed and unmanaged code. So I need to inspect the data at the byte level. What I need to do is store a number, say 8 into a 4-byte integer then copy it to an array bytArray(4) and compare those bytes with other data. I also need to set up the same array and copy it to an integer variable.
View 2 RepliesFirst of all; I'm completely new to VB.
Pass a string array from Visual Basic Express 2008 to unmanaged code in a Dll.The array is Dimmed as in DIM myArray(11) as String
I'm developing the dll myself using Powerbasic.
The dll expect a 4 bytes pointer to a safearray's handle. As far as I have understood it; the array's string elements must be passed in ANSI format. The code in the dll will then use OLE Api to get the LBound and Ubound of the array and the address of the first element in array.
I want to access the methods of a dll that is not managed. Seems to be vb6 from my best guess and what I know about the program.That part I have managed to figure out. If I drag the x.dll to my bin folder, the interpreter wrapper is created, etc. I can access the methods in the dll just fine. The problem is the database connection.
For informational purposes: The dll is compiled for a vbscript .asp website. There are a few methods in the dll that just manipulate the input (which I can access error free- its how I tested the dll usage), but most make a db call to get or set or update, etc. data in the db. The dll expects an ADODB connection. The asp files are setup such as:
set DllObj = server.CreateObject("dll.class")
set connect = server.createobject("ADODB.Connection")
connect.open "SystemDSNName","user","password"
[code].....
It is using a DSN but just as easily could be a DSN-Less connection. My problem is that the dll expects the connection to be open and available to it. Can I make a ADODB database connection available and open for this dll in a vb.net asp.net website.Basically,I need to use the business logic and db data changes through this dll, but want to make the front end in asp.net.I know there is an ADODB namespace in .net somwhere and I tried using it but it was not doing the job and really, I did not quite understand how to.
I am trying to use an unmanaged dll in my VBE2008 Project. My application works fine on my computers (3 Vista sp1 and 2 XP sp3 / all with .net framwork 3.5), but after the sp2 update for 2 of Vista machines, it throws often an AccessViolationException (on those machines with Vista sp2). The error message is:"Attempt to read or write protected memory. This is often an indication that other memory is corrupt."I have checked and found that the exception was thrown by the dll call-sub.
<DllImport("RefProp.dll", EntryPoint:="SETUPdll", SetLastError:=True, CharSet:=CharSet.Ansi, _
ExactSpelling:=True, CallingConvention:=CallingConvention.StdCall)> _
[code].....
How can I write a signed byte (sbyte) to unmanaged memory using VB.NET? I can use Marshal.WriteByte() to write an unsigned byte, but there doesn't appear to be an overload for signed bytes.
View 1 Replies