DLL导入

时间:2014-11-27 10:24:47

标签: c# dll

我必须做一个能够闪存2个微控制器(CPU / PIC)的软件(使用C#.NET)。 要做到这一点,我有一个VB6 DLL,不幸的是我不能在VS中轻松使用它。 我在CPP中找到了一个开发工具包wrotte

此套件包含:

  • 文件Flasher.lib - >看不到源代码

  • // Flasher.exp - >看不到源代码

  • // DLL_interface.bas

示例DLL_interface.bad:

Option Explicit

'dll function declarations

Declare Function SetCom Lib "st10flasher.dll" (ByVal PortName$, ByVal comspeed As Long) As Long

Declare Function LoadFile Lib "st10flasher.dll" (ByVal FileName$, ByRef Fsize As Long) As Long

Declare Function InitMonitor Lib "st10flasher.dll" (ByVal device As Any) As Long

Declare Function ProgramFlash Lib "st10flasher.dll" () As Long

Declare Function GetError Lib "st10flasher.dll" (ByVal BufferForStatus As Any) As Long
  • // basicinterface.h

示例BasicInterface.h

#ifndef _BASIC_INTERFACE_H
#define _BASIC_INTERFACE_H

#ifdef __cplusplus
extern "C" 
{
#endif

#ifndef ST10FLASHER_API
#define ST10FLASHER_API __declspec(dllimport) // To import flasher function
#endif

// Communication function
ST10FLASHER_API unsigned int PASCAL SetCom(char *PortName, unsigned int ComSpeed);
ST10FLASHER_API unsigned int PASCAL CloseCom(void);
ST10FLASHER_API unsigned int PASCAL ComIsKline(void);
ST10FLASHER_API unsigned int PASCAL SetComSpeed(char *portName, unsigned int ComSpeed);
ST10FLASHER_API unsigned int PASCAL CalibrateSpeed(char *PortName, unsigned int ComSpeed);
ST10FLASHER_API unsigned int PASCAL IsAvailableBaudRate(const double frequency,const unsigned int     baudrate);

我不知道如何使用它。如果有人有想法请:)! 非常感谢!

2 个答案:

答案 0 :(得分:1)

您不应使用“添加引用”引用DLL。相反,只需将DLL放在您正在使用的C#EXE旁边。您已经有一个如何在VB.NET中执行此操作的示例,您只需将此代码转换为C#:

您需要将它放在C#代码中:

  [DllImport(@"st10flasher.dll")]
  public static extern long SetCom(string portName, long int comspeed);

然后你可以简单地称它为C#方法。 e.g:

  long x = SetCom("MyPort", 1600);

如需更多帮助,Google可以使用“平台调用”(也称为P / Invoke)。

答案 1 :(得分:0)

您不需要引用st10flasher.dll 将它放在应用程序的system32文件夹或Bin文件夹中

你不会使用原来的dll,你将使用接口它的类,

class whatever
    <DllImport("st10flasher.dll", CharSet := CharSet.Unicode)> _
     Public Shared Function SetCom(port as string, comspeed as int16 ) as integer

End Class

以主要形式(例如)

dim result as int16 = whatever.SetCom("808080", 55)