当然,我在启动时通过回调将我的const字符串值从我的C++传递到我的C#中,但我想知道是否有一种方法可以在C++头文件中定义它们,然后我也可以在C#中引用它们.
我已经用枚举这样做,因为它们很容易.我在我的C++库项目中包含一个文件(通过顶部有一个pragma的.h文件)和我的C#应用程序(作为链接):
#if _NET
public
#endif
enum ETestData
{
First,
Second
};
Run Code Online (Sandbox Code Playgroud)
我知道它听起来很乱,但它的工作原理:)
但是......我怎么能用字符串常量做同样的事情 - 我最初认为平台之间的语法太不同了,但也许有办法呢?
使用涉及#if _NET,#define等的巧妙语法?
使用资源文件?
使用C++/CLI库?
有任何想法吗?
我有一个类似于此列表的字符串列表:
tags = ('apples', 'apricots', 'oranges', 'pears', 'peaches')
Run Code Online (Sandbox Code Playgroud)
我应该如何使用itertools.groupby()按每个字符串中的第一个字符对此列表进行分组?我应该如何提供itertools.groupby()所需的'key'参数?
关于从函数返回字符串文字或字符串我总是很困惑.我被告知可能存在内存泄漏,因为您不知道何时会删除内存?
例如,在下面的代码中,如何实现foo()以使代码的输出为"Hello World"?
void foo ( ) // you can add parameters here.
{
}
int main ()
{
char *c;
foo ( );
printf ("%s",c);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
另外,如果返回类型foo()不是无效,但你可以返回char*,它应该是什么?
这是一个非常简单的问题,我觉得它很愚蠢,但我很紧张,我需要弄清楚:)
我只需要知道如何创建一个包含文本和其他变量的字符串.例如在Java中,我可以这样做:
String someString;
for(int i = 0; i>10; i++){
someString = ("this text has printed " + i + " times"); //how do I create this line in C++?
System.out.println(someString);
i++;
}
Run Code Online (Sandbox Code Playgroud)
编辑4:
好吧,Rahul G在下面的回答非常好,并且程序编译好了,但是当我运行它而不是获取我想要的文件名字符串时,我得到了一堆数字.例如:<< "frame " << i << " .jpg"创建:"013679000.jpg"而不是"frame 0.jpg"就像我想要的那样.有什么想法吗?
for(int i = 0; frames; i++)
{
frame = cvQueryFrame(capture);
std::string s = static_cast<std::ostringstream &>(std::ostringstream() << argv[1] << i << " .jpg").str();
cvSaveImage(s.c_str(), frame);
}
Run Code Online (Sandbox Code Playgroud) 例如:
(1).SomeFunction().Equals("one")
(2).SomeFunction().Equals("two")
Run Code Online (Sandbox Code Playgroud)
在我正在使用的情况下,我真的只需要数字1-9,我应该只使用一个开关/选择案例吗?
更新我也不需要本地化.
更新2这是我最终使用的内容:
Private Enum EnglishDigit As Integer
zero
one
two
three
four
five
six
seven
eight
nine
End Enum
(CType(someIntThatIsLessThanTen, EnglishDigit)).ToString()
Run Code Online (Sandbox Code Playgroud) 我正在使用COM Interop.我在VB6中调用了一个大约13000个字符串的字符串.如果我在纯VB6中执行调用,则执行大约需要800ms.如果我通过c#和COM Interop执行它大约需要8秒钟.我假设延迟是由编组引起的.
如果我对编组是正确的,如果有人能以最快的方式建议我进入C#,我将不胜感激.例如,a)将其作为字节数组公开b)将一个byref字符串参数提供给VB6层会更好吗?
我也很感激一些示例代码.我试过了
Marshal.PtrToStringAuto(Marshal.ReadIntPtr(myCOMObject.GetString, 0)
Run Code Online (Sandbox Code Playgroud)
无济于事.
-
继弗朗西的评论之后.我只是简单地从C#dll引用VB6 dll(正在处理中).这是OLEView的摘录
interface _MyCOMObect : IDispatch {
...
[id(0x60030006)]
HRESULT GetString(
[in] _IEventHistory* p_oEventHistory,
[out, retval] _IXML** );
...
};
[
uuid(09A06762-5322-4DC1-90DD-321D4EFC9C3E),
version(1.0),
custom({17093CC6-9BD2-11CF-AA4F-304BF89C0001}, "0")
]
coclass MyCOMObject {
[default] interface _CFactory;
};
[
odl,
uuid(C6E7413F-C63A-43E4-8B67-6AEAD132F5E5),
version(1.0),
hidden,
dual,
nonextensible,
oleautomation
]
Run Code Online (Sandbox Code Playgroud)
我应该指出参数(p_oEventHistory)是我在C#中实例化的另一个COM对象,但需要大约80ms
小号
我有一个表,在每个单元格中我想放置字符串,但它们比单元格宽度宽得多.为了防止换行,我想缩短字符串以适应单元格,并在末尾附加"..."以指示字符串更长.
该表有大约40行,必须对每个单元格进行,所以它很快就很重要.我应该使用JS/jQuery吗?
我该怎么办?
感谢您的时间.
亲切的问候,
马吕斯
我的一个朋友带着这种我无法解释的奇怪行为来找我,任何洞察力的观点都会受到赞赏.
我正在运行VS 2005(C#2.0),以下代码显示了该行为
int rr = "test".IndexOf("");
Console.WriteLine(rr.ToString());
Run Code Online (Sandbox Code Playgroud)
上面的代码,打印"0",清楚地表明它应该返回-1
这也发生在Java中,下面的Class显示了这种行为:
public class Test{
public static void main(String[] args){
System.out.println("Result->"+("test".indexOf("")));
}
}
Run Code Online (Sandbox Code Playgroud)
我正在运行Java 1.6.0_17