#include "stdafx.h"
#include "windows.h"
typedef int ( * GetCuringReal)(int,int,int,int,int,double,double,double,double);
typedef int ( * CloseCuring)(int);
int main(int argc, char* argv[])
{
HINSTANCE hDll; //DLL句柄
GetCuringReal addFun;
CloseCuring multfun; //函数指针
hDll = LoadLibrary("..\\Debug\\CuringLibrary.dll");//用此API函数加载DLL
if (hDll != NULL)
{
addFun = (GetCuringReal)GetProcAddress(hDll,"GetCuringReal");//用此函数查找函数指针位置
if(addFun!=NULL)
{
int result = addFun(2,0,1,0,0,0,0,0,0);//调用此函数,
printf("%d",result);
}
FreeLibrary(hDll);
}
return 0;
}
以上在加载CuringLibrary.dll的时候 hDll = 0x00680000 { unused=9460301 }
等到查找函数指针位置后, addFun = <未定义的值>
求大神帮忙看看。是不是C#的dll生成时候还需要加什么设置吗?
9 个解决方案
#1
C#的dll导出函数名称不对,你用dependencies.exe 察看.
#2
不是很明白。我用C++直接引用
#using "..\debug\CuringLibrary.dll"
using namespace CuringLibrary;
调用DLL的函数是没问题的,换成函数指针就不行了
#using "..\debug\CuringLibrary.dll"
using namespace CuringLibrary;
调用DLL的函数是没问题的,换成函数指针就不行了
#3
C#的DLL代码
using System;
using System.Collections.Generic;
using System.Text;
using System.Linq;
using System.Data;
using System.Data.SqlClient;
namespace CuringLibrary
{
public class CuringData
{
public int GetCuringReal(int PoolNum, int CuringRunBit, int CuringUpBit
, int CuringBWBit, int CuringDownBit, double AverageTemperature, double CoreTemperature
, double SetTemperature, double Environment)
{
。。。。。。
。。。。。。。
return 0;
}
}
#4
你这样用跟直接c语言用有什么区别?c++直接用是怎么用的?dll有个class的时候导出来的函数只是一个指针?是个带类型的吧。
#5
#6
另外,你这个C#的dll这样写在C++里用起来会很麻烦,你应该把 GetCuringReal 方法声明为 static,这样才能在 C++ 里用【类名.方法名】的形式来调用,不然你要先 new 一个 CuringData 对象出来才能调用得到那个方法。
#7
楼上正解~~~如果你这办法能调用c#类库了,那就可以直接用c来了。。。。
另外你这个c++层只是为了封装c#而已,干嘛非要用指针呢。
另外你这个c++层只是为了封装c#而已,干嘛非要用指针呢。
#8
我是.NET开发,对于C和C++一窍不通。现在涉及到一个项目,甲方那边是成品软件,C写的,只能用函数指针。我又不懂C、C++,乱套了。。谁能给我个简单的实例啊?C语言--> C++ -->C#,
#1
C#的dll导出函数名称不对,你用dependencies.exe 察看.
#2
不是很明白。我用C++直接引用
#using "..\debug\CuringLibrary.dll"
using namespace CuringLibrary;
调用DLL的函数是没问题的,换成函数指针就不行了
#using "..\debug\CuringLibrary.dll"
using namespace CuringLibrary;
调用DLL的函数是没问题的,换成函数指针就不行了
#3
C#的DLL代码
using System;
using System.Collections.Generic;
using System.Text;
using System.Linq;
using System.Data;
using System.Data.SqlClient;
namespace CuringLibrary
{
public class CuringData
{
public int GetCuringReal(int PoolNum, int CuringRunBit, int CuringUpBit
, int CuringBWBit, int CuringDownBit, double AverageTemperature, double CoreTemperature
, double SetTemperature, double Environment)
{
。。。。。。
。。。。。。。
return 0;
}
}
#4
你这样用跟直接c语言用有什么区别?c++直接用是怎么用的?dll有个class的时候导出来的函数只是一个指针?是个带类型的吧。
#5
#6
另外,你这个C#的dll这样写在C++里用起来会很麻烦,你应该把 GetCuringReal 方法声明为 static,这样才能在 C++ 里用【类名.方法名】的形式来调用,不然你要先 new 一个 CuringData 对象出来才能调用得到那个方法。
#7
楼上正解~~~如果你这办法能调用c#类库了,那就可以直接用c来了。。。。
另外你这个c++层只是为了封装c#而已,干嘛非要用指针呢。
另外你这个c++层只是为了封装c#而已,干嘛非要用指针呢。
#8
我是.NET开发,对于C和C++一窍不通。现在涉及到一个项目,甲方那边是成品软件,C写的,只能用函数指针。我又不懂C、C++,乱套了。。谁能给我个简单的实例啊?C语言--> C++ -->C#,