小编sla*_*ppy的帖子

从void*转换为C#中的对象

在C#项目中,我需要通过在结构中放置引用来传递对象参数.即我有一个传递给调度员的结构

struct SOMESTRUCT
{
    public int lpObject;
}
Run Code Online (Sandbox Code Playgroud)

其中lpObject包含指向自定义对象的指针

class SomeClass
{
    private string foo;
}
Run Code Online (Sandbox Code Playgroud)

并且SOMESTRUCT结构从方法传递到方法,最终到达我的代码.我无法修改执行流程和奇怪的SOMSTRUCT系统,所以我猜测唯一的解决方案是将我的对象转换为这样的指针:

var myObject = new SomeClass();
GCHandle GC = GCHandle.Alloc(myObject, GCHandleType.Pinned);
int myRef = GC.AddrOfPinnedObject().ToInt32();
GC.Free();

SOMESTRUCT struct;
struct.lpObject = myRef;
someMethod(struct);
Run Code Online (Sandbox Code Playgroud)

但是,我无法弄清楚如何从lpObject字段中检索myObject成员.像这样的东西:

SomeClass myObject = CastPointerToObject(struct.myRef) as SomeClass;
Run Code Online (Sandbox Code Playgroud)

有办法做到这一点,还是不可能?如何告诉垃圾收集器处理对象?我应该创建一个新的垃圾收集对象并按字段复制数据字段吗?

TYIA,

c# garbage-collection pointers unsafe

5
推荐指数
1
解决办法
3093
查看次数

System.Windows.Forms.Application和System.Windows.Application之间的互操作性

我必须将WPF UI集成到.NET 2.0应用程序中.

需要在GUI Dispatcher线程中修改ObservableCollection,因此我提出了一个涉及的解决方案 InvokeLater()

ObservableCollection<Item> items;
public delegate void AddItemDelegate(Item i);

public void AddItem(Item item)
{
    System.Windows.Application.Current.Dispatcher.BeginInvoke(
        new AddItemsDelegate(i => items.Add(i), item);
}
Run Code Online (Sandbox Code Playgroud)

但是,由于该项目最初是使用.NET 2.0编写的System.Windows.Forms.Application,因此主线程使用a ,因此System.Windows.Application.Current为null.

我不能只System.Windows.Forms.Application用一个替换当前的System.Windows.Application应用程序,因为我的应用程序严重依赖于这个API,这两个类是广泛不兼容的.

有没有办法获得当前的System.Windows.Application?还是一种打电话BeginInvoke()给我的方式System.Windows.Forms.Application?或者我是否考虑编写自己的DIY系统来从正确的线程委托该集合的版本?

.net c# interop

5
推荐指数
1
解决办法
2164
查看次数

WebSphere MQ:如何使用Java API发布MQSC命令?

我正在尝试编写一个连接到队列管理器的小应用程序,并在Java上发布一些命令.

根据我在文档中读到的内容,我了解必须通过在"SYSTEM.ADMIN.COMMAND.QUEUE"队列中发送命令来发出命令.

但是,定义的回复队列replyToQueueName在执行后仍为空.

我错过了什么吗?

这是代码的精简版:

MQQueueManager qMgr = new MQQueueManager("SOME_HOSTNAME");

MQQueue qOut = qMgr.accessQueue("SYSTEM.ADMIN.COMMAND.QUEUE", MQC.MQOO_OUTPUT);
MQQueue qIn = qMgr.accessQueue("SYSTEM.DEFAULT.LOCAL.QUEUE", MQC.MQOO_INPUT_AS_Q_DEF);

MQMessage message = new MQMessage();
message.writeUTF("DISPLAY QMGR ALL");
message.messageType = MQC.MQMT_REQUEST;
message.format = MQC.MQFMT_STRING;
message.replyToQueueName = "SYSTEM.DEFAULT.LOCAL.QUEUE";

qOut.put(message, new MQPutMessageOptions());

MQMessage retrievedMessage = new MQMessage();
MQGetMessageOptions gmo = new MQGetMessageOptions();
gmo.options = MQC.MQGMO_WAIT | MQC.MQGMO_CONVERT;

qIn.get(retrievedMessage, gmo);
Run Code Online (Sandbox Code Playgroud)

java ibm-mq

5
推荐指数
1
解决办法
5442
查看次数

这个程序有什么问题?

#include <iostream>
#include <string>
#include <fstream>

using namespace std;

int main() {
    string x;
    getline(cin,x);
    ofstream o("f:/demo.txt");
    o.write( (char*)&x , sizeof(x) );
}
Run Code Online (Sandbox Code Playgroud)

我得到了意想不到的输出.我没有得到我在字符串函数中写的东西.为什么是这样 ?请解释 .

就像我写的时候steve pro我得到8/ steve pro ÌÌÌÌÌÌ ÌÌÌÌ文件中的输出

我希望输出是史蒂夫亲

c++ io visual-c++

1
推荐指数
1
解决办法
185
查看次数

用于生成Armstrong数字的简单C++代码

以下是我生成阿姆斯壮数字的简单尝试.但它只输出"1".可能有什么问题?

#include<stdio.h> 
#include<conio.h> 
#include<iostream.h>

int main() 
{ 
    clrscr();
    int r; 
    long int num = 0, i, sum = 0, temp; 

    cout << "Enter the maximum limit to generate Armstrong number "; 
    cin >> num;
    cout << "Following armstrong numbers are found from 1 to " << num << "\t \n"; 

    for(i=1;i<=num;i++) 
    { 
        temp = i; 
        while( temp != 0 ) 
        { 
            r = temp%10; 
            sum = sum + r*r*r; 
            temp = temp / 10; 
        } 

        if ( i …
Run Code Online (Sandbox Code Playgroud)

c++ sequences

1
推荐指数
1
解决办法
9609
查看次数

为等效的其他ID添加类

<select id="list" multiple=multiple>
    <option value="1" id="one" selected="selected">one </option>
    <option value="2" id="two" selected="selected">two </option>
    <option value="3" id="three">three </option>
</select>

<ul id="uli">
    <li aaa="one">one</li>
    <li aaa="two">two</li>
    <li aaa="three">three</li>
</ul>
Run Code Online (Sandbox Code Playgroud)

使用CSS:

.back {
 color: red;
}
Run Code Online (Sandbox Code Playgroud)

和Javascript:

$("#list").find("option:selected").each(function() {
    // logic here
});
Run Code Online (Sandbox Code Playgroud)

进入each()回调,我想在uli中添加等效的类.我想addClass(.back)用于其中attr aaa== id的列表.

直播:http://jsfiddle.net/yjL9n/3/

html javascript jquery

1
推荐指数
1
解决办法
378
查看次数

c ++ 11中的正则表达式

我想解析Linux中的cpu信息.我写了这样的代码:

// Returns full data of the file in a string
std::string filedata = readFile("/proc/cpuinfo");

std::cmath results;
// In file that string looks like: 'model name : Intel ...'
std::regex reg("model name: *");
std::regex_search(filedata.c_str(), results, reg);

std::cout << results[0] << " " << results[1] << std::endl;
Run Code Online (Sandbox Code Playgroud)

但它返回空字符串.怎么了?

c++ regex linux c++11

1
推荐指数
1
解决办法
1154
查看次数