我正在努力为软件SDK的DLL文件,我试图调用一个函数来获取有关软件主机的信息.
在函数想要的结构中有两个unsigned char变量(HostMachineAddress,HostProgramVersion),当我尝试从c#调用它时,我似乎"松散"了最后一个字节...如果我将下面的c#struct中的SizeConst更改为5我确实得到了丢失的字节,但是它导致另一个变量丢失了数据.
有人可以帮我找到解决这个问题的方法吗?也尝试使用类而不是struct导致system.stackoverflow错误
C#Struct
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
public struct sHostInfo
{
public int bFoundHost;
public int LatestConfirmationTime;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)]
public string szHostMachineName;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 4)]
public string HostMachineAddress;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)]
public string szHostProgramName;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 4)]
public string HostProgramVersion;
}
Run Code Online (Sandbox Code Playgroud)
C#
[DllImport("Cortex_SDK.dll")]
public static extern int GetHostInfo(out sHostInfo pHostInfo);
Run Code Online (Sandbox Code Playgroud) 我想在我的c#代码中访问这个函数,这可能吗?所以最后c ++代码会调用我的函数并应用名为"sFrameofData"的结构.
C++代码:
//The user supplied function will be called whenever a frame of data arrives.
DLL int Cortex_SetDataHandlerFunc(void (*MyFunction)(sFrameOfData* pFrameOfData));
Run Code Online (Sandbox Code Playgroud)
这可能会奏效吗?
C#代码:
[DllImport("Cortex_SDK.dll")]
public extern static int Cortex_SetDataHandlerFunc(ref IntPtr function(ref IntPtr pFrameOfData) );
Run Code Online (Sandbox Code Playgroud) 基本上我希望能够在类的实例中引用变量,但我希望引用成为类变量,所以我不需要在类的内部作为参数发送它
码:
int num = 0;
myClass(num);
print num; // output is 0 but i'd like it to be 10 :)
class myClass
{
private int classNumber;
myClass(ref int number)
{
print number; //output is 0
// id like this to be a reference to the refenrence
classNumber = number;
DoSomething();
}
public void DoSomething()
{
ClassNumber = 10;
}
}
Run Code Online (Sandbox Code Playgroud)
为什么我要问这是因为我正在使用winforms并且有一个主表单将一个类的实例发送到一个新表单,该表单应该编辑该类并将其发回...现在我使用Form.ShowDialog()来避免用户在新表单中编辑时使用主表单,然后从新表单中获取数据
editForm edtfrm = new editForm(ref instanceOfClass);
edtfrm.showDialog();
//grab the instance back
instanceOfClass = edtfrm.editedClass;
Run Code Online (Sandbox Code Playgroud)
我怎么解决这个问题?我不喜欢这个解决方案
我试图设置元素的值,当元素看起来像这样时<element></element>我会这样做:
pugi::xml_node node = xmlBase.child("element");
pugi::xml_node nodechild = node.first_child();
nodechild.set_value(this->elementValue);
Run Code Online (Sandbox Code Playgroud)
但是,当我有一个看起来像这样的元素:
<element />
Run Code Online (Sandbox Code Playgroud)
这不会工作..我尝试在"set_value"行之前使用它
if(nodechild == NULL)
{
nodechild = node.append_child();
}
Run Code Online (Sandbox Code Playgroud)
但这会在该元素中创建一个新元素,我不想这样做,
也许我的拳头方法甚至是错的?你如何正确设置元素的值?