我目前正在与FANUC31I型B控制器通信。我的目标是能够上传一个部件程序,验证没有数据丢失,并在需要时删除程序。
FANUC有一个可在C#中使用的有用函数的FOCAS库。下面是我遇到麻烦的DllImport。
/* read selected file name */
[DllImport("FWLIB64.dll", EntryPoint="cnc_pdf_rdmain")]
public static extern short cnc_pdf_rdmain( ushort FlibHndl, [Out,MarshalAs(UnmanagedType.AsAny)] Object a );根据他们的技术团队,我需要传递一个指向字符串的指针,以保存存储在对象a中的返回值。字符串是刚刚上传到系统的部件程序的文件路径。这对我来说很重要,因为它将允许我选择上传的程序作为主程序。
这是我在我的主要代码中使用的:
Object mg1 = new object();
rslt = Focas64.cnc_pdf_rdmain(this.i31Handle, );
if (rslt != 0)
{
StopActivity(true);
return;
}我对C#和编码并不太熟悉。所以请帮我把它哑了。谢谢!
发布于 2017-04-03 18:34:25
我在下面的工作代码中解决了这个问题:
// Verify code
byte[] a = new byte[244];
rslt = Focas64.cnc_pdf_rdmain(this.i31Handle, a);
string result = System.Text.Encoding.UTF8.GetString(a);
if (rslt != 0)
{
StopActivity(true, Convert.ToString(rslt), this.tDownloadls, true);
return;
}发布于 2016-08-03 17:43:42
我不太了解你们正在谈论的FANUC产品,但是这里有一些字符串基础。
您可以创建这样的字符串
string myString;然后像这样得到指向它的指针
&myString;所以您的代码可能如下所示
string myString;
rslt = Focas64.cnc_pdf_rdmain(this.i31Handle, &myString);发布于 2016-08-03 18:26:26
您可以使用以下建议:
[DllImport("FWLIB64.dll", EntryPoint="cnc_pdf_rdmain")]
public static unsafe extern short cnc_pdf_rdmain( ushort FlibHndl, [ Out, MarshalAs( UnmanagedType.AsAny ) ] out Object a );
Object mg1 = new object( );
rslt = Focas64.cnc_pdf_rdmain(this.i31Handle, out mg1 );
if ( rslt != 0 )
{
StopActivity( true );
return;
}
string result = mg1.ToString( );
Console.WriteLine( result );https://stackoverflow.com/questions/38750068
复制相似问题