Я работаю с некоторым оборудованием, которое имеет DLL. Я считаю, что у него есть два метода вызова функциональности (от использования шпионского DLL-приложения).
В настоящее время он работает в VB6, используя
Public Type Versions
Pname As Long
Manuf As Long
VMajor As Long
VMinor As Long
VState As Long
End Type
Public Declare Function FLASH_GetVersion Lib "C:\flash_cntrl.dll" (ByVal fxc_Versions As Long) As Integer
Dim vVers As Versions
Dim strProdName As String
Dim strManuf As String
strProdName = " "
strManuf = " "
vVers.Manuf = StrPtr(strManuf)
vVers.Pname = StrPtr(strProdName)
iReturn = FLASH_GetVersion(VarPtr(vVers))
Я «вынужден» перейти на C # 2008/2010, чтобы иметь возможность использовать другое оборудование, которое не поддерживается в VB6.
Итак, я пытаюсь использовать вышеупомянутое и сталкиваюсь с ошибкой AccessViolationException
. Мне «повезло», что у меня есть заголовочный файл C ++ с определениями WinAPI, но я все еще не могу. Любая помощь будет высоко ценится.
typedef struct {
LPWSTR productname;
LPWSTR manufacturer;
unsigned Vers_Major;
unsigned Vers_Minor;
unsigned Vers_State; // = 0 released, > 0 internal use only
} FLASH_INFO;
int WINAPI FLASH_GetVersion (FLASH_INFO *fxc_Version);
Мой C # пока что
static class NativeMethods
{
[DllImport("C:\\flash_cntrl.dll")]
public static extern short FLASH_GetVersion(FLASH_INFO vVers);
}
public class FLASH_INFO
{
public string productname;
public string manufacturer;
public int Vers_Major;
public int Vers_Minor;
public int Vers_State;
}
FLASH_INFO vers = new FLASH_INFO();
string strManuf = " ";
string strProdName = " ";
vers.productname = strProdName;
vers.manufacturer = strManuf;
vers.Vers_Major = 0;
vers.Vers_Minor = 0;
vers.Vers_State = 0;
short sRet = NativeMethods.FLASH_GetVersion(vers);
Console.WriteLine("{0}|{1}", "sRet", sRet.ToString());
Возможно, это что-то простое, но я относительно новичок в языке C # (немного программировал на компьютере и только в Silverlight).
Заранее спасибо