2014-11-27 4 views
0

Я должен сделать soft (используя C# .NET), способный мигать 2 микроконтроллера (CPU/PIC). Для этого у меня есть VB6 DLL, к сожалению, я не могу использовать его легко в VS. Я нашел комплект разработчика wrotte в CPPDLL импорт

этот комплект содержит:

  • файл 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); 

я понятия не имею, как его использовать. Если у кого-то есть идея, пожалуйста :)! Спасибо, много!

+0

'К сожалению, я не могу использовать его легко в VS' Каковы эти трудности, которые вы испытываете? – Reniuz

+0

Когда я импортирую ссылку в VS, у меня есть ошибка: проверьте, есть ли файл, если сборка или действительный COM-компонент. – PyNico

+0

Вы зарегистрировались? – Reniuz

ответ

1

Вы не должны ссылаться на DLL с помощью 'Add Reference'. Вместо этого просто поместите DLL рядом с используемым C# EXE. У вас уже есть пример того, как сделать это в VB.NET, нужно просто перевести этот код на C#:

Вы должны будете поместить это в C# код:

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

Тогда вы можете просто назовите его как метод C#. например:

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

Для получения дополнительной помощи Google для «Платформы Invoke» (также называемой P/Invoke).

+0

Спасибо! он работает нормально! – PyNico

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) 
+0

спасибо за ответ, как только я добавлю его в system32 или Как я должен использовать его? – PyNico

+0

Нет, не помещайте его в system32 –

+0

, вы не будете использовать оригинальную dll, вы будете использовать класс, который его интерфейс, class whatever – Thair

Смежные вопросы