楼上说的我觉得或多或少都有点不正确:
把VB的窗体程序编译成DLL.这个可能没有说清楚,vb是vb 6.0版本编辑器制作成的DLL吗?
(1)如果是就不能“右键项目名称,添加引用,浏览到你的dll文件 ”这样的方法是不行的,
因为C#不认这个DLL(原因自己想想就知道了),所以没办法添加的。
这个时候就只能这样了(举个例子)
比如有个DLL是corma.dll代码如下:
-----------------------------------------------
using System.Runtime.InteropServices;
[StructLayoutAttribute(LayoutKind.Sequential)]
public struct tagMETERDATA {
/// float
public float m_fSumCold;
/// float
public float m_fCurHeat;
/// float
public float m_fHeatPower;
/// float
public float m_fFlowV;
/// float
public float m_fSumFlow;
/// float
public float m_fSupWaterT;
/// float
public float m_fBackWaterT;
/// int
public int m_nRunTime;
/// char*
[MarshalAsAttribute(UnmanagedType.LPStr)]
public string m_strMeterTime;
}
public partial class NativeMethods {
///Return Type: int
///lpsMeterNum: LPTSTR->LPWSTR->WCHAR*
///lpsFactoryCode: LPTSTR->LPWSTR->WCHAR*
///nChannel: int
///lpsType: LPTSTR->LPWSTR->WCHAR*
///pMeterData: lpMeterData->tagMETERDATA*
[DllImportAttribute(".//corma.dll", EntryPoint="ReadMeterData")]//一定要将DLL文件路径设置正确
public static extern
int ReadMeterData(
[MarshalAsAttribute(UnmanagedType.LPWStr)] System.Text.StringBuilder lpsMeterNum,
[MarshalAsAttribute(UnmanagedType.LPWStr)] System.Text.StringBuilder lpsFactoryCode,
int nChannel,
[MarshalAsAttribute(UnmanagedType.LPWStr)] System.Text.StringBuilder lpsType,
ref tagMETERDATA pMeterData
) ;
}
调用的时候直接调用ReadMeterData这个函数就可以了。需要注意的是函数的参数类型一定要给对,要不然调用的时候会出问题的。
(2)如果是制作的dll那就很好说了,因为和C#都是在.net框架下运行的,此时可以直接添加引用就行。