我有第三方.NET程序集和一个大型Java应用程序.我需要从Java应用程序中调用.NET类库提供的方法.程序集未启用COM.我搜索过网络,到目前为止,我有以下内容:
C#代码(cslib.cs):
using System;
namespace CSLib
{
public class CSClass
{
public static void SayHi()
{
System.Console.WriteLine("Hi");
}
}
}
Run Code Online (Sandbox Code Playgroud)
编译(使用.net 3.5,但使用2.0时也是如此):
csc /target:library cslib.cs
Run Code Online (Sandbox Code Playgroud)
C++代码(clib.cpp):
#include <jni.h>
#using <CSLib.dll>
using namespace CSLib;
extern "C" _declspec(dllexport) void Java_CallCS_callCS(JNIEnv* env, jclass cls) {
CSLib::CSClass::SayHi();
}
Run Code Online (Sandbox Code Playgroud)
编译(使用VC 2008工具,但使用2003工具时也是如此):
cl /clr /LD clib.cpp
mt -manifest clib.dll.manifest -outputresource:clib.dll;2
Run Code Online (Sandbox Code Playgroud)
Java代码(CallCS.java):
class CallCS {
static {
System.loadLibrary("clib");
}
private static native void callCS();
public static void main(String[] args) {
callCS();
}
}
Run Code Online (Sandbox Code Playgroud)
当我尝试运行java类时,Java VM在调用方法时崩溃(它能够加载库):
# # …
或者它现在反过来了?
从我所听到的有些领域,C#证明比C++更快,但我从来没有勇气自己测试它.
你们中的任何一个人都可以详细解释这些差异,或者将我指向正确的地方以获取相关信息.
什么是(如果有的话)隐含的假设或限制以及设计的差异如下:
在他的:
class SampleClass1
{
IWorker workerA;
IWorker workerB;
void setWorkerA(IWorker w);
void setWorkerB(IWorker w);
WorkResult doWork();
}
Run Code Online (Sandbox Code Playgroud)
B)与此相对:
class SampleClass2
{
WorkResult doWork(IWorker workerA, IWorker workerB);
}
Run Code Online (Sandbox Code Playgroud)
我知道这取决于具体项目,但如果上面的类是小框架的一部分怎么办?第一个类能够维持状态并更自然地分离步骤但是第二类确保与外部调用者的"实时通信"更自然,因为每次调用doWork()时都传递Worker.
是否有任何建议的用法或通用实践指导上述两种方式之间的选择?谢谢.
我正在尝试进行AJAX调用(通过JQuery),这将启动一个相当长的过程.我希望脚本只是发送一个响应,表明进程已经启动,但是在PHP脚本运行完毕之前,JQuery不会返回响应.
我用"关闭"标题(下面)尝试了这个,还有输出缓冲; 似乎都不起作用.任何猜测?或者这是我在JQuery中需要做的事情?
<?php
echo( "We'll email you as soon as this is done." );
header( "Connection: Close" );
// do some stuff that will take a while
mail( 'dude@thatplace.com', "okay I'm done", 'Yup, all done.' );
?>
Run Code Online (Sandbox Code Playgroud) 如果我在具有CSIDL_PROGRAM_FILESx86文件夹ID而不是CSIDL_PROGRAM_FILES ID的32位系统中使用SHGetFolderPath api调用会发生什么?
理论上CSIDL_PROGRAM_FILESx86应映射到C:\program files (x86)
64位系统,但它在32位系统中映射到什么路径不存在?
有时,在查找内容和行为时,着色日志文件或其他内容可以提供良好的概述
我刚看到grep有着色功能
grep -C 99999 --color <regexp> <filename>
Run Code Online (Sandbox Code Playgroud)
还有哪些其他方法?
我正在尝试修复一个伪装成虚拟COM端口的无响应USB设备.手动重新插入工作,但最多可能有12个这样的单位.是否有API命令来执行unplug/replug循环的程序化等效操作?
有没有办法知道用户是否关闭了Web浏览器中的选项卡?特别是IE7,还有FireFox等.如果包含我们网站的当前选项卡关闭,我希望能够从我们的asp代码处理这种情况.
当我使用自定义SqlDataSource时,我无法使用GridView使用户能够对数据列进行排序.
我有一个GridView,其中HTML中引用它的代码是最小的:
<asp:GridView id="grid" runat="server" AutoGenerateColumns="False" AllowSorting="True">
</asp:GridView>
Run Code Online (Sandbox Code Playgroud)
在代码隐藏中,我附加了一个动态创建的SqlDataSource(它包含的列并不总是相同,因此用于创建它的SQL是在运行时构造的).例如:
我设置了专栏......
BoundField column = new BoundField();
column.DataField = columnName;
column.HeaderText = "Heading";
column.SortExpression = columnName;
grid.Columns.Add(column);
Run Code Online (Sandbox Code Playgroud)
数据源......
SqlDataSource dataSource = new SqlDataSource(
"System.Data.SqlClient",
connectionString,
generatedSelectCommand);
Run Code Online (Sandbox Code Playgroud)
那么gridview ......
grid.DataSource = dataSource;
grid.DataKeyNames = mylistOfKeys;
grid.DataBind();
Run Code Online (Sandbox Code Playgroud)
当我希望它对列数据进行排序时,当用户点击列标题时,没有任何反应.任何想法,我缺少什么?
如果有一个更好的方式这样做也会有所帮助,因为这看起来很混乱!
c# ×3
c++ ×2
debugging ×2
winapi ×2
32-bit ×1
64-bit ×1
ajax ×1
asp-classic ×1
asp.net ×1
benchmarking ×1
class-design ×1
command-line ×1
grep ×1
gridview ×1
integration ×1
java ×1
jquery ×1
logging ×1
path ×1
performance ×1
php ×1
shell ×1
unix ×1
usb ×1
usbserial ×1
windbg ×1