Calling external functions

  • Thread starter Thread starter Tim Greenwood
  • Start date Start date
T

Tim Greenwood

I am at my wits end here. I have a simple project with one global function
returning a long value.

__declspec(dllexport) long myfunc()
{
}

I've built the dll, added it as a reference to my C# project. Now how in
the world do I reference "myfunc" ????
It totally eludes me.

Many thanks for any help here.
 
Tim,

You should have received an error when you added it to your project. If
you have a function that is exported by a DLL, you need to call it through
the P/Invoke layer. If the dll is somewhere in the path where LoadLibrary
will find it, you can do this:

[DllImport("<dll name here>.dll")]
static extern int myfunc();

And then call the dll function in managed code.

Hope this helps.
 
I did that exactly and it says "Unable to find an entry point named gettime
in DLL ctime.dll"


Nicholas Paldino said:
Tim,

You should have received an error when you added it to your project.
If you have a function that is exported by a DLL, you need to call it
through the P/Invoke layer. If the dll is somewhere in the path where
LoadLibrary will find it, you can do this:

[DllImport("<dll name here>.dll")]
static extern int myfunc();

And then call the dll function in managed code.

Hope this helps.


--
- Nicholas Paldino [.NET/C# MVP]
- (e-mail address removed)

Tim Greenwood said:
I am at my wits end here. I have a simple project with one global
function returning a long value.

__declspec(dllexport) long myfunc()
{
}

I've built the dll, added it as a reference to my C# project. Now how in
the world do I reference "myfunc" ????
It totally eludes me.

Many thanks for any help here.
 
this should be so simple....here is the code in my simple "C" dll

#define DllExport __declspec(dllexport)

#include <time.h>

//DllExport

long gettime(void);

long gettime()

{

time_t tt = time(NULL);

return (long)tt;

}

--------------------------------------------------------------------------
here is the import in my C# app

[DllImport("ctime.dll", CallingConvention=CallingConvention.Cdecl)]

public static extern long gettime();



-------------------------------------------

I've tried several different CallingConventions and nothing same thing
"Unable to find entry point named gettime in dll ctime.dll








Nicholas Paldino said:
Tim,

You should have received an error when you added it to your project.
If you have a function that is exported by a DLL, you need to call it
through the P/Invoke layer. If the dll is somewhere in the path where
LoadLibrary will find it, you can do this:

[DllImport("<dll name here>.dll")]
static extern int myfunc();

And then call the dll function in managed code.

Hope this helps.


--
- Nicholas Paldino [.NET/C# MVP]
- (e-mail address removed)

Tim Greenwood said:
I am at my wits end here. I have a simple project with one global
function returning a long value.

__declspec(dllexport) long myfunc()
{
}

I've built the dll, added it as a reference to my C# project. Now how in
the world do I reference "myfunc" ????
It totally eludes me.

Many thanks for any help here.
 
The line
//DllExport

was not always commented ....


Tim Greenwood said:
this should be so simple....here is the code in my simple "C" dll

#define DllExport __declspec(dllexport)

#include <time.h>

//DllExport

long gettime(void);

long gettime()

{

time_t tt = time(NULL);

return (long)tt;

}

--------------------------------------------------------------------------
here is the import in my C# app

[DllImport("ctime.dll", CallingConvention=CallingConvention.Cdecl)]

public static extern long gettime();



-------------------------------------------

I've tried several different CallingConventions and nothing same thing
"Unable to find entry point named gettime in dll ctime.dll








Nicholas Paldino said:
Tim,

You should have received an error when you added it to your project.
If you have a function that is exported by a DLL, you need to call it
through the P/Invoke layer. If the dll is somewhere in the path where
LoadLibrary will find it, you can do this:

[DllImport("<dll name here>.dll")]
static extern int myfunc();

And then call the dll function in managed code.

Hope this helps.


--
- Nicholas Paldino [.NET/C# MVP]
- (e-mail address removed)

Tim Greenwood said:
I am at my wits end here. I have a simple project with one global
function returning a long value.

__declspec(dllexport) long myfunc()
{
}

I've built the dll, added it as a reference to my C# project. Now how
in the world do I reference "myfunc" ????
It totally eludes me.

Many thanks for any help here.
 
AAAHHHHH changed the name of my code file from .cpp to .c removed the
function prototype and now it finds it....go figure




Tim Greenwood said:
The line
//DllExport

was not always commented ....


Tim Greenwood said:
this should be so simple....here is the code in my simple "C" dll

#define DllExport __declspec(dllexport)

#include <time.h>

//DllExport

long gettime(void);

long gettime()

{

time_t tt = time(NULL);

return (long)tt;

}

--------------------------------------------------------------------------
here is the import in my C# app

[DllImport("ctime.dll", CallingConvention=CallingConvention.Cdecl)]

public static extern long gettime();



-------------------------------------------

I've tried several different CallingConventions and nothing same thing
"Unable to find entry point named gettime in dll ctime.dll








Nicholas Paldino said:
Tim,

You should have received an error when you added it to your project.
If you have a function that is exported by a DLL, you need to call it
through the P/Invoke layer. If the dll is somewhere in the path where
LoadLibrary will find it, you can do this:

[DllImport("<dll name here>.dll")]
static extern int myfunc();

And then call the dll function in managed code.

Hope this helps.


--
- Nicholas Paldino [.NET/C# MVP]
- (e-mail address removed)

"Tim Greenwood" <tim_greenwood A-T yahoo D-O-T com> wrote in message
I am at my wits end here. I have a simple project with one global
function returning a long value.

__declspec(dllexport) long myfunc()
{
}

I've built the dll, added it as a reference to my C# project. Now how
in the world do I reference "myfunc" ????
It totally eludes me.

Many thanks for any help here.
 
In C++ you have to export your functions with "C linkage", that is, you need
to wrap your functions or prototypes in a C linkage block.

extern "C"
{
__declspec(dllexport) long gettime();
...
}

long gettime()
{
...
}


Note also that your function declaration in C# has the wrong return type, a
long in C/C++ is 32 bit a long in C# is 64 bit.

[C#]
public static extern int gettime();


Willy.

Tim Greenwood said:
this should be so simple....here is the code in my simple "C" dll

#define DllExport __declspec(dllexport)

#include <time.h>

//DllExport

long gettime(void);

long gettime()

{

time_t tt = time(NULL);

return (long)tt;

}

--------------------------------------------------------------------------
here is the import in my C# app

[DllImport("ctime.dll", CallingConvention=CallingConvention.Cdecl)]

public static extern long gettime();



-------------------------------------------

I've tried several different CallingConventions and nothing same thing
"Unable to find entry point named gettime in dll ctime.dll








Nicholas Paldino said:
Tim,

You should have received an error when you added it to your project.
If you have a function that is exported by a DLL, you need to call it
through the P/Invoke layer. If the dll is somewhere in the path where
LoadLibrary will find it, you can do this:

[DllImport("<dll name here>.dll")]
static extern int myfunc();

And then call the dll function in managed code.

Hope this helps.


--
- Nicholas Paldino [.NET/C# MVP]
- (e-mail address removed)

Tim Greenwood said:
I am at my wits end here. I have a simple project with one global
function returning a long value.

__declspec(dllexport) long myfunc()
{
}

I've built the dll, added it as a reference to my C# project. Now how
in the world do I reference "myfunc" ????
It totally eludes me.

Many thanks for any help here.
 
Back
Top