我必须从C#的企业资源规划系统中提取一些数据。不深入讨论SAP的细节(我相信您不会想知道它的)。
我正在从C#内部调用一些远程函数,它可以正常工作,但我遇到了一个奇怪的问题。在C#中,我必须调用的函数之一是BAPI_USER_GET_DETAIL。
所以我在C#中这样做:
s.Bapi_User_Get_Detail("No","10217502", out address, out alias, out companyName,
out defaults, out islocked, out lastmodified,
[Optional]、[In]和[Out]属性是否会影响C#程序的行为?
static void F([Optional]string s, [In] int i, [Out] int i2)
{
}
在C#语言级别上,这些属性似乎不起任何作用。在所有情况下都是这样吗?与out和ref参数有任何关系吗?
这个问题只是出于好奇。我刚刚发现了一个工具错误,其中一个工具错误地将[Out]视为out。
我正在尝试从C#调用一个用C++编写的OLE接口。来自C++代码的.ODL文件的签名如下:
long GetData1( int* data );
long GetData2( double* data );
long GetData3( VARIANT* data );
下面是我的C#代码示例:
[InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
public interface IMyInterface
{
[DispId(1)]
long GetData1 ( [In, Out] ref int data );
下面是用c++编写的代码,如何在c#中转换它。如果您检查pams_get_msgw函数,第一个参数是of (char*),我如何在c#中传递相同的参数。
struct
{
short m_nStatus;
short m_nReg_Id;
short m_nNumber_Reg;
} oRegReply;
short nBufSize = siz
在C#中,是否可以在不使用ref/out关键字的情况下交换两个变量(即使用unsafe)?
对于ex来说,
swap(ref x,ref y);//It is possbile to by passing the reference
但是,有没有其他方法来做同样的事情。在交换函数中,您可以使用temp变量。但是,在C#中如何在不使用ref/out关键字的情况下交换变量?
我刚刚在C#中做了一个交换例程,如下所示:
static void Swap(ref int x, ref int y)
{
int temp = x;
x = y;
y = temp;
}
它做的事情和下面的C++代码做的一样:
void swap(int *d1, int *d2)
{
int temp=*d1;
*d1=*d2;
*d2=temp;
}
那么,ref和out关键字就像不使用C#代码的unsafe的指针吗?
我是C#的新手。我浏览了一下MSDN,浏览了一下enum方法,但是我不知道TEnum和enumType之间的区别。
public static bool TryParse<TEnum>(
string value,
out TEnum result)
public static string[] GetNames(
Type enumType)
这里有什么区别?对于第一种方法,返回enumType result不是更好吗?
我正在使用一个具有以下功能定义的COM插件接口:
HRESULT foo ( [out, ref] VARIANT* a, [out, ref] VARIANT* b );
当使用tlbimp (来自codeplex的tlbimp2.exe)时,.NET库具有以下接口函数:
int foo ( out object a, out object b );
问题是调用应用程序将进行函数调用:
VARIANT a;
::InitVariant( &a );
plugin->foo( &a, NULL );
在C#中,我实现了以下功能:
int foo ( out object
我在我的C#项目中乱搞了一下,我很惊讶地看到这段代码被编译了:
var a = new Action<string>(ref b => b = "hello");
反之亦然,比如Action<string> a = ref b => b = "hello";会在'ref‘处给出一个语法错误。
果然,将代码片段复制粘贴到中会给出一个编译器错误:
A ref or out argument must be an assignable variable
我在编译器中遇到错误了吗?(我使用的是VS 2015和C# 6。)
编
我正在从托管代码调用本机代码,并且我在找出如何正确编组我的代码时遇到了一些困难。在C语中,我有以下内容:
struct cHandle {
unsigned long handleLo;
unsigned long handleHi;
}
struct cBuffer {
unsigned long bufferSize;
unsigned long bufferType;
__field_bcount(bufferSize) void *bufferPtr;
}
struct cBufferDesc {
unsigned long bu
我想知道是否可以在定义set和get访问器的(字典)索引器或属性上使用C#的get访问器,例如:
readonly Dictionary<string, int> dictionary = ...;
ref int v = ref dictionary["foo"];
// ^^^^^^^^^^^^^^^^^^^^^
// CS0206: A property or indexer may not be passed as an out or ref parameter
v = 42;
是否有可能以某种方式向属性或索引器提供ref功能(而不使用
C# 7.2为方法引入了in参数。我理解它们的工作原理:
int MyMethod(in int i) {
i += 1; // illegal, i is read-only
return i + 1;
}
我发现这些参数是通过引用传递的(比如ref和out)。
我不明白的是目的的in参数。我用它们能得到什么呢?
我理解out和ref参数的用途,能够在调用范围内为变量赋值是非常有用的,但是该函数与in参数不存在。
我试图为用C++编写的非托管库编写一个包装器。库的编码器给了我一个示例C#包装器,其中包括如下所示的DllImport:
[DllImport(LibraryPath, CallingConvention = CallingConvention.Cdecl)]
internal static extern int doSomething(int inputArraySize, byte* inputArrayPointer, out int outputInteger, out int outputArraySize, out float* outputArrayPointer);
publ