我知道这.NET是JIT编译你只是在应用程序运行之前运行的架构,但确实为64位架构的JIT编译器优化呢?
在编写将运行的应用程序时,是否有任何需要完成或考虑的事项64bit system?(即使用Int64会提高性能吗?JIT编译器会自动使Int64在32位系统上运行吗?)
我正在开发VS2010中的C#4.0项目,需要使用一些包含在VS2008上用C#3.5创建的控件的旧DLL.当我第一次将DLL添加到引用时,我能够通过intellisense看到命名空间并创建其中一个控件的实例,但是当我去构建时,它会给我以下错误:
The type or namespace name 'BCA' could not be found (are you missing a using directive or an assembly reference?)
Run Code Online (Sandbox Code Playgroud)
我已经有一个针对该命名空间的using指令,现在以红色加下划线,表明VS无法找到它.现在,intellisense根本不会接受该名称空间.
我甚至尝试将控件添加到工具箱(有效),但是当我将它们拖到GUI时,它说它找不到DLL引用,即使它显然知道它在哪里.
我甚至尝试将目标框架更改为3.5,但仍然具有相同的结果.
有关为什么会发生这种情况的任何想法?
编辑 - 我注意到在VS输出的csc.exe参数中,它没有我正在尝试使用的DLL的任何/引用条目.当我在VS2008中创建相同的基本项目时,存在这些条目.此外,我可以成功引用VS2010中的DLL项目中的DLL ...它似乎只是WinForms项目不起作用.
我正在编写一个C/C++ DLL,并希望在使用像这样的.def文件之前导出我已经完成的某些功能
LIBRARY "MyLib"
EXPORTS
Foo
Bar
Run Code Online (Sandbox Code Playgroud)
使用定义为此的代码,例如:
int Foo(int a);
void Bar(int foo);
Run Code Online (Sandbox Code Playgroud)
但是,如果我想声明一个Foo()的重载方法,如下所示:
int Foo(int a, int b);
Run Code Online (Sandbox Code Playgroud)
由于def文件只有函数名而不是完整的原型,我无法看到它如何处理重载函数.您是否只使用一个条目,然后在将正确的原型函数指针传递给LoadLibrary()时指定您想要的重载版本?
编辑:要清楚,这是在使用Visual Studio 2005的Windows上
编辑:将非def(__ declspec)方法标记为答案...我知道这实际上并没有像我想的那样使用def文件解决问题,但似乎很可能没有使用def文件的(官方)解决方案.但是,如果有人知道我们没有重载函数和def文件,我们会将问题保持打开状态.
很多时候我见过Visual Studio解决方案,它有多个共享源文件的项目.这些常见的源文件通常位于公共目录中,而在解决方案资源管理器中,它们的图标会在左下方显示一个链接箭头.
但是,每次我尝试将源文件添加到该项目主目录之外的项目时,它只会自动将其复制到目录中,以便我不再拥有共享副本.
我发现我可以通过在文本编辑器中手动打开项目文件并修改类似"../../../Common/Source.cs"的路径来解决这个问题,但这更像是一个黑客然后我想.
是否有一个设置或我可以更改的内容,这将允许我在IDE中执行此操作?
在.Net WebBrowser控件上,我可以看到加载页面的唯一方法是设置URL属性.但我想给它一些我已经在内存中的HTML代码,而不是先将它写入文件.有没有办法做到这一点?或者有任何控件可以做到这一点?
那里有没有Mono(C#)兼容的网络/套接字库吗?
最好是:
如果它是:它真的很棒:
编辑:
为了澄清更多,我的"高于TCP/IP的一级"评论意味着我想要的东西基本上是一个自包含的服务器/客户端.我不想处理编写线程代码,处理每个连接等等.例如,我希望代码看起来像这样:
Server s = new Server(8080);
s.NewConnection += new ConnectionEventHandler(NewConnection);
s.DataRecieved += new DataEventHandler(NewData);
s.Start();
void NewConnection(object sender, EventArgs e)
{
s.Send((Connection)sender, "Hello World!"); //(Connection)sender is the connection instance so the server knows which to send the response to
}
void NewData(object sender, EventArgs e)
{
s.Send((Connection)sender, e.Data); //Echo back
}
Run Code Online (Sandbox Code Playgroud)
不是最干净的代码,但我认为它提供了基本的想法.
我正在尝试使用pyserial将数据发送到arduino.但是当我打开COM端口时,它将DTR设置为低电平并重置电路板.但是,我有我的arduino代码设置,因此我必须通过按住两个按钮1秒钟将其置于串行接收模式.如果可能的话,我宁愿不必在arduino的启动时进行串行输入.
显然你可以修改serialWin32.py文件,改变读取的行:
self._dtrState = win32.DTR_CONTROL_ENABLE
Run Code Online (Sandbox Code Playgroud)
至:
self._dtrState = win32.DTR_CONTROL_DISABLE
Run Code Online (Sandbox Code Playgroud)
但是,有没有办法直接在我的python脚本中禁用它?我还需要为所有系统执行此操作.我宁愿不强迫人们改变他们的基本串行配置只是为了使用这个脚本.
串口打开如下:
com = serial.Serial(port, baud, timeout=1);
Run Code Online (Sandbox Code Playgroud)
更新:最后我找到了一个适合我的设置的解决方案.由于我不需要一直使用串行数据,只有当我将设备置于串行接收模式时,才发现了一种方法来禁用arduino本身的串行连接复位.
很多帖子都说你可以通过在5V和复位之间放置一个~100欧姆的电阻来禁用DTR复位.但我不希望这是永久性的事情.所以,我在PD5和复位之间放置了一个电阻器.然后,在软件中:
void setup() {
//.......
DDRD &= ~(_BV(PD5)); //Set PD5 as input initially
PORTD |= (_BV(PD5)); //Set high
//.......
}
inline void setResetDisable(bool state)
{
if(state)
DDRD |= (_BV(PD5)); //Set PD5 as output to put 5V on reset line
else
DDRD &= ~(_BV(PD5)); //set back to input mode
}
Run Code Online (Sandbox Code Playgroud)
所以现在,当我想要处于串行模式时,我调用setResetDisable(true),它在该100欧姆电阻和复位引脚上抛出5V,防止DTR将其拉低并重置芯片:)然后我只调用setResetDisable(false) )当我离开串行模式时,芯片可以正常编程.
我看到了很多与此相反的问题,我觉得很奇怪,因为我无法阻止我的子进程关闭,但有没有办法调用 subprocess.Popen 并确保它的进程在调用 python 脚本后保持运行退出?
我的代码如下:
dname = os.path.dirname(os.path.abspath(__file__))
script = '{}/visualizerUI.py'.format(dname)
self.proc = subprocess.Popen(['python', script, str(width), str(height), str(pixelSize)], stdout=subprocess.PIPE)
Run Code Online (Sandbox Code Playgroud)
这可以很好地打开进程,但是当我关闭脚本时(无论是因为它完成还是使用 Ctrl+C),它也会关闭 VisualizerUI.py 子进程,但我希望它保持打开状态。或者至少有这个选择。
我缺少什么?
我正在尝试创建一个bookmarklet,在点击后,会从用户请求一些信息(在这种情况下是一个url和几个其他字段),然后将该数据发送到我服务器上的php页面,然后显示结果.
我想为此做一个Ajax调用,以便我实际上不会重定向到新页面,只是获取数据,但我想我会遇到Ajax的"同源策略"限制....是否有任何已知的方式基本上做同样的事情?
另外,传递参数的最佳方法是什么?我已经有一个机制来接收参数作为来自表单的帖子消息......有什么办法可以重用这个吗?
我在详细信息模式下有一个ListView控件,只有一列.它位于一个仅用于键盘的表格上,主要是用于向上/向下箭头滚动和输入以进行选择.所以我真的不需要滚动条,只是想让它们看起来更干净.但是,当我将ListView.Scrollable属性设置为false时,我仍然可以上下移动所选项目,但只要它移动到当前不在视图中的项目,列表就不会移动以显示该项目.我已经尝试使用EnsureVisible以编程方式滚动列表,但在此模式下它什么都不做.
有没有办法手动移动列表上下滚动,但没有滚动条存在?
c# ×3
.net ×2
dll ×2
python ×2
64-bit ×1
ajax ×1
arduino ×1
bookmarklet ×1
c ×1
c#-4.0 ×1
c++ ×1
controls ×1
javascript ×1
jit ×1
listview ×1
mono ×1
networking ×1
optimization ×1
performance ×1
pyserial ×1
serial-port ×1
sockets ×1
subprocess ×1
winforms ×1