Connecting Tech Pros Worldwide Forums | Help | Site Map

Calling external functions

Tim Greenwood
Guest
 
Posts: n/a
#1: Dec 8 '05
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.



Nicholas Paldino [.NET/C# MVP]
Guest
 
Posts: n/a
#2: Dec 8 '05

re: Calling external functions


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]
- mvp@spam.guard.caspershouse.com

"Tim Greenwood" <tim_greenwood A-T yahoo D-O-T com> wrote in message
news:%23faLcxE$FHA.3872@TK2MSFTNGP12.phx.gbl...[color=blue]
>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.
>[/color]


Tim Greenwood
Guest
 
Posts: n/a
#3: Dec 8 '05

re: Calling external functions


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


"Nicholas Paldino [.NET/C# MVP]" <mvp@spam.guard.caspershouse.com> wrote in
message news:uzUlXzE$FHA.4088@TK2MSFTNGP09.phx.gbl...[color=blue]
> 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]
> - mvp@spam.guard.caspershouse.com
>
> "Tim Greenwood" <tim_greenwood A-T yahoo D-O-T com> wrote in message
> news:%23faLcxE$FHA.3872@TK2MSFTNGP12.phx.gbl...[color=green]
>>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.
>>[/color]
>
>[/color]


Tim Greenwood
Guest
 
Posts: n/a
#4: Dec 9 '05

re: Calling external functions


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 [.NET/C# MVP]" <mvp@spam.guard.caspershouse.com> wrote in
message news:uzUlXzE$FHA.4088@TK2MSFTNGP09.phx.gbl...[color=blue]
> 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]
> - mvp@spam.guard.caspershouse.com
>
> "Tim Greenwood" <tim_greenwood A-T yahoo D-O-T com> wrote in message
> news:%23faLcxE$FHA.3872@TK2MSFTNGP12.phx.gbl...[color=green]
>>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.
>>[/color]
>
>[/color]


Tim Greenwood
Guest
 
Posts: n/a
#5: Dec 9 '05

re: Calling external functions


The line
//DllExport

was not always commented ....


"Tim Greenwood" <tim_greenwood A-T yahoo D-O-T com> wrote in message
news:uqTGmQF$FHA.2036@TK2MSFTNGP14.phx.gbl...[color=blue]
> 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 [.NET/C# MVP]" <mvp@spam.guard.caspershouse.com> wrote
> in message news:uzUlXzE$FHA.4088@TK2MSFTNGP09.phx.gbl...[color=green]
>> 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]
>> - mvp@spam.guard.caspershouse.com
>>
>> "Tim Greenwood" <tim_greenwood A-T yahoo D-O-T com> wrote in message
>> news:%23faLcxE$FHA.3872@TK2MSFTNGP12.phx.gbl...[color=darkred]
>>>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.
>>>[/color]
>>
>>[/color]
>
>[/color]


Tim Greenwood
Guest
 
Posts: n/a
#6: Dec 9 '05

re: Calling external functions


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" <tim_greenwood A-T yahoo D-O-T com> wrote in message
news:%23TVnqSF$FHA.160@TK2MSFTNGP12.phx.gbl...[color=blue]
> The line
> //DllExport
>
> was not always commented ....
>
>
> "Tim Greenwood" <tim_greenwood A-T yahoo D-O-T com> wrote in message
> news:uqTGmQF$FHA.2036@TK2MSFTNGP14.phx.gbl...[color=green]
>> 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 [.NET/C# MVP]" <mvp@spam.guard.caspershouse.com> wrote
>> in message news:uzUlXzE$FHA.4088@TK2MSFTNGP09.phx.gbl...[color=darkred]
>>> 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]
>>> - mvp@spam.guard.caspershouse.com
>>>
>>> "Tim Greenwood" <tim_greenwood A-T yahoo D-O-T com> wrote in message
>>> news:%23faLcxE$FHA.3872@TK2MSFTNGP12.phx.gbl...
>>>>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.
>>>>
>>>
>>>[/color]
>>
>>[/color]
>
>[/color]


Willy Denoyette [MVP]
Guest
 
Posts: n/a
#7: Dec 9 '05

re: Calling external functions


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" <tim_greenwood A-T yahoo D-O-T com> wrote in message
news:uqTGmQF$FHA.2036@TK2MSFTNGP14.phx.gbl...[color=blue]
> 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 [.NET/C# MVP]" <mvp@spam.guard.caspershouse.com> wrote
> in message news:uzUlXzE$FHA.4088@TK2MSFTNGP09.phx.gbl...[color=green]
>> 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]
>> - mvp@spam.guard.caspershouse.com
>>
>> "Tim Greenwood" <tim_greenwood A-T yahoo D-O-T com> wrote in message
>> news:%23faLcxE$FHA.3872@TK2MSFTNGP12.phx.gbl...[color=darkred]
>>>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.
>>>[/color]
>>
>>[/color]
>
>[/color]


Closed Thread