Does anyone have a good example that shows how to create a DLL using cygwin/gcc and call it using VB .NET? I am specifically interested in an example that shows how to pass a String variable. In the example that I show below, I am able to call a C function. I can successfully pass a long integer. But the string that I pass shows garbage in the called function.
My dll code looks like... (test.c) #include <stdio.h> #include <wtypes.h> define EXPORT __declspec(dllexport) EXPORT int myTest(char *s1, long i1) { printf("Here is the string %s, here is the integer %ld.\n",s1, i1); } I then compile as follows: $ gcc -c test.c $ gcc -shared -o test.dll test.o (I have also tried several combinations of linking and compiling with different options). In my Visual Basic .NET console application, I create a class that wraps the "myTest" function and then call it from main as follows: Public Class LibWrap Declare Function myTest Lib "c:\cygwin\home\Administrator\test_dll\test.dll" (ByRef s1 As String, ByVal i1 As Long) As Integer End Class Module Module1 Sub Main() Dim test As String test = "My String" LibWrap.myTest(test, 6432) LibWrap.myTest(test, 20) LibWrap.myTest(test, 3000) End Sub End Module I also modified the "path" environment variable so vb finds the class path to cygwin. As I mentioned, I am able to pass integers successfully, but strings don't seem to get marshaled to (char *). I recognize that the .NET String implementation is different, but thought the .NET marshaling would take care of conversion. A simple working example would be extremely helpful. Thanks -- Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple Problem reports: http://cygwin.com/problems.html Documentation: http://cygwin.com/docs.html FAQ: http://cygwin.com/faq/