我最近在做一个关于数值计算软件的项目,具体思路这样的。我用c++(工具vc6.0)来写算法函数(仅仅涉及数值计算,没有涉及任何windows函数及mfc),写好后将其导出为dll文件,并将其拷贝到同事电脑上的路径C:\WINDOWS\system32,同事只需要在VB中加入声明语句就可以方便的调用,为了接口方便,函数参数不涉及任何自定义类型,但是函数内部实现用到了大量自定义数据类型。
我开始没有采用第三方的函数类库来做,自己写了矩阵类、大量的矩阵操作函数,解方程组算法函数,这些类对象和函数仅仅在我需要导出的函数内部使用(并不导出),最后只导出同事需要用的函数接口,同事也调用成功。待会我会把例子贴出,供大家参考。后来我用matlab的C++函数类库来做算法,进行调用之前只对vc进行设置,主要是让vc包含matlab的函数类库及加入相应的matlab模块lib,(vc具体设置过程可参看网页http://blog.csdn.net/lvyehuaigu/archive/2008/05/08/2413371.aspx,matlab的c++数学函数库简介可参看网页http://www.chinaai.org/Article_Show.asp?ArticleID=212)采用matlab函数库写好dll后,拷贝到我的电脑的C:\WINDOWS\system32下面,vb调用成功,但在同事电脑下调用失败,我觉得应该是dll中调用第三方的dll的原因,但我就是不太清楚VC工程生成dll时候有没有把第三方的dll集成到我定义的dll中,还是别人机器上的VB要用我这个dll中的函数时,必须得把dll中用到的其它第三方类库的dll,lib一起提供呢?如果这样我就觉太麻烦了,matlab的类库有好多文件?对dll机制不是很懂,刚刚接触,望各位指点一二。
下面是我举出的两种简单的例子。我故意的写的详细点,高手如果不屑一看麻烦可以直接回答问题,新手也方便学习一下,共同研究,非常感谢大家看帖!
1:不用第三方(matlab)函数类库时,调用成功,过程如下:
一、使用VC++的向导建立dll工程
具体操作如下:打开菜单“File\New”,选择“Projects\Win32 Dynamic-Link Library”,工程命名为testDll1,点ok,→选择“A simple DLL project”,这时系统会自动生成3个文件:testDll1.cpp,stdafx.cpp,stdafx.h。  
二、打开testDll1.cpp,下面是我完善后的代码程序,内容为定义一个类Ctest,有两个数据成员x,y,还有一个成员函数sum,完成求和x,y。然后由定义导出的函数double __stdcall add(double a, double b)通过类Ctest的sum完成相加。具体代码如下:
三、VC代码:
testDll1.cpp:
// testDll1.cpp : Defines the entry point for the DLL application.
//#include "stdafx.h"
#include "matlab.hpp"//声明我的函数
extern "C" __declspec(dllexport) double __stdcall add(double a, double b);//DLL入口函数
BOOL APIENTRY DllMain(HANDLE hModule,
  DWORD ul_reason_for_call,
  LPVOID lpReserved)
  
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH: 
case DLL_THREAD_ATTACH: 
case DLL_THREAD_DETACH: 
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}//一个自定义类
class Ctest
{
public:
Ctest(double xx, double yy)//构造
{
x = xx;
y = yy;
} double sum()  // 求和
{
return x+y;
}
private:
double x;
double y;
};//我的函数,注意接口部分不涉及任何自定义未导出类。
double __stdcall add(double a, double b)
{
Ctest test(a, b);//函数利用自定义类完成加法。
return test.sum();
}四、最后在工程目录下新建一个记事本文件,改名字为testDll1.def,添加入工程,内容为:
LIBRARY testDll1
EXPORTS 
add
五、编译后将生成testDll1.dll,将其拷贝到同事的电脑C:\WINDOWS\system32中,然后同事打开 VB,新建一个标准的exe窗体,代码中写下:
  Option Explicit
  Private Declare Function add Lib "testDll1" (ByVal p As Double, ByVal k As Double) As DoublePrivate Sub Command1_Click()
  Dim c As Long
  c = add(24.3, 82)
  Text1.Text = c
End Sub
运行成功!
2,使用外部的c++函数库,例如在参照网页http://blog.csdn.net/lvyehuaigu/archive/2008/05/08/2413371.aspx中设置完成vc后,将1中的add函数代码改为:
double __stdcall add(double a, double b)
{
mwArray x(1,2); //使用matlab的C++函数库中mwArray
x(1) = a;
x(2) = b;
return sum(x).ExtractScalar(1);
}重新生成dll代码,拷贝到本机的C:\WINDOWS\system32中,vb依然可以调用,但是拷贝到别的机器上时就不行了,于是我将我的matlab卸掉,并将文件删除干净,重启后,发现vb也不能调用失败了。由此我得出是因为vc并没有把程序中用到的matlab的函数库一起打包进dll,但我奇怪的是,当我再次安装了matlab后,路径和原来完全一样,重新配置了matlab的编译器,还是不行。然后我有重新按照2的办法编译生成dll,拷贝到C:\WINDOWS\system32,vb依然调用失败。由于我对vc生成包含第三方n多库函数的dll文件没有经验,所以特此恳请指教!
以上叙述有什么不明白可提问,谢谢!