[英]VB6/C++ WINAPI to C#
我正在使用一些具有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
錯誤。 我足夠“幸運”,可以擁有帶有WinAPI定義的C ++頭文件,但仍然很費勁。 任何幫助將非常感激。
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)。
先感謝您
字符串strManuf =“”; 字符串strProdName =“”;
vers.productname = strProdName;
vers.manufacturer = strManuf;
問題出在那些方面。 它們的c ++結構類型是LPWSTR,它轉換為.net中的IntPtr,后者是指向對象的指針。
字符串的默認封送處理為8位字符,但是LPWSTR是Unicode字符串。 返回類型也不正確。 固定:
[DllImport("C:\\flash_cntrl.dll")]
public static extern int FLASH_GetVersion(ref FLASH_INFO vVers);
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)
public struct FLASH_INFO
{
public string productname;
public string manufacturer;
public int Vers_Major;
public int Vers_Minor;
public int Vers_State;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.