标签: interop

在C#中使用.jar java库API?

我是一名入门级程序员,所以请在回复中加以描述.

我试图在我的C#.net应用程序中使用作为.jar文件提供的Java API.我不太了解Java,但是当我尝试运行它时,这个.jar文件说"没有主类清单属性"所以这意味着它是一个库?此Java API还附带一个.java文件,该文件显示了如何使用该库,但我看不到.jar中的代码.

我在这个网站上发现了这个问题,其中一个答案是:"以简单的方式,你可以将你的java类打包到jar文件然后在C#中使用Process类来执行和映射IO流." 我熟悉C#中的Process类,但我不明白如何在C#.net项目中使用它来使用Java库.

这可能吗?或者那个答案是不正确的?

如果是这样,你能解释我如何在我的C#应用​​程序中使用.jar库.

.net c# java interop

51
推荐指数
2
解决办法
7万
查看次数

将数组写入Excel范围

我目前正在尝试使用以下代码将对象数组中的数据写入Excel中的范围,其中objData只是一个字符串数组:

private object m = System.Type.Missing;
object[] objData = getDataIWantToWrite();

Range rn_Temp;
rn_Temp = (Range)XlApp.get_Range(RangeName, m);
rn_Temp = rn_Temp.get_Resize(objData.GetUpperBound(), 1);
rn_Temp.value2 = objData;
Run Code Online (Sandbox Code Playgroud)

这几乎可以工作,问题是范围被填满但是每个单元格都获得了第一个项目的值objData.

逆向工作,即

private object m = System.Type.Missing;
object[] objData = new object[x,y]

Range rn_Temp;
rn_Temp = (Range)XlApp.get_Range(RangeName, m);
rn_Temp = rn_Temp.get_Resize(objData.GetUpperBound(), 1);
objData = (object[])rn_Temp.value2;
Run Code Online (Sandbox Code Playgroud)

将返回一个包含工作表中所有值的数组,所以我不确定为什么阅读和赋值的工作方式不同.

有没有人成功地做过这件事?我目前正逐个单元地编写阵列,但它需要处理很多(> 50,000)行,因此非常耗时.

c# excel interop

51
推荐指数
3
解决办法
11万
查看次数

无法使用已与其基础RCW分离的COM对象

我正在尝试使用OpcRcw.da.dll.如果我在测试控制台项目中互操作这个dll一切正常,但如果我构建dll项目来进行我的互操作体操并将我的库引入我的控制台项目中,我收到此错误:

无法使用已与其基础RCW分离的COM对象.

需要对类lib项目做些什么来不杀死RCW ref?

interop

48
推荐指数
2
解决办法
6万
查看次数

无法使用已与其基础RCW分离的COM对象

我有一些COM组件,我从一些c#dll调用.

我还有一个使用该.dll的winforms应用程序.

当我关闭应用程序时,我得到以下异常:

无法使用已与其基础RCW分离的COM对象.

堆栈跟踪显示此异常来自.dll中的析构函数.我实现了这个析构函数来调用COM中的一些清理方法.

为什么会这样?如何最好地解决它?

c# com multithreading interop winforms

46
推荐指数
1
解决办法
8万
查看次数

使用C++类成员函数作为C回调函数

我有一个C库,需要注册回调函数来定制一些处理.回调函数的类型是int a(int *, int *).

我正在编写类似于以下内容的C++代码,并尝试将C++类函数注册为回调函数:

class A {
  public:
   A();
   ~A();
   int e(int *k, int *j);
};

A::A()
{
   register_with_library(e)
}

int
A::e(int *k, int *e)
{
  return 0;
}

A::~A() 
{

}
Run Code Online (Sandbox Code Playgroud)

编译器抛出以下错误:

In constructor 'A::A()',
error:
 argument of type ‘int (A::)(int*, int*)’ does not match ‘int (*)(int*, int*)’.
Run Code Online (Sandbox Code Playgroud)

我的问题:

  1. 首先是可以注册一个C++类的memeber函数,就像我想要做的那样,如果是这样的话怎么样?(我在http://www.parashift.com/c++-faq-lite/mixing-c-and-cpp.html上阅读了32.8 .但在我看来它并没有解决问题)
  2. 是否有替代/更好的方法来解决这个问题?

c c++ interop callback

45
推荐指数
4
解决办法
5万
查看次数

从C++调用C#代码

我需要能够从C++调用任意C#函数.http://www.infoq.com/articles/in-process-java-net-integration建议使用ICLRRuntimeHost :: ExecuteInDefaultAppDomain(),但这只允许我调用具有以下格式的方法:int method(string arg)

调用任意C#函数的最佳方法是什么?

c# interop c++-cli

41
推荐指数
4
解决办法
7万
查看次数

Microsoft.Office.Interop.Excel真的很慢

我使用标准的Microsoft.Office.Interop.Excel将1200 X 800矩阵(indexMatrix)导出到excel文件.该应用程序工作,只是它真的非常慢(即使对于100 x 100矩阵).我还通过TextWriter导出文本文件,它几乎可以立即工作.有没有办法更快地导出到excel文件?

这是我的代码:

        Excel.Application xlApp=new Excel.Application();
        Excel.Workbook xlWorkBook;
        Excel.Worksheet xlWorkSheet;
        object misValue = System.Reflection.Missing.Value;

        //xlApp = new Excel.ApplicationClass();
        xlWorkBook = xlApp.Workbooks.Add(misValue);

        xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1);
        for (int i = 0; i < 800; i++)   //h
            for (int j = 0; j < 1200; j++)
                xlWorkSheet.Cells[i+1,j+1] =indexMatrix[i][j];


        xlWorkBook.SaveAs("C:\\a.xls", Excel.XlFileFormat.xlWorkbookNormal, misValue, misValue, misValue, misValue, Excel.XlSaveAsAccessMode.xlExclusive, misValue, misValue, misValue, misValue, misValue);
        xlWorkBook.Close(true, misValue, misValue);
        xlApp.Quit();

        releaseObject(xlWorkSheet);
        releaseObject(xlWorkBook);
        releaseObject(xlApp);

        MessageBox.Show("Excel file created , you can find the file c:\\csharp-Excel.xls");
Run Code Online (Sandbox Code Playgroud)

c# excel interop

41
推荐指数
4
解决办法
4万
查看次数

你如何从C代码调用Python代码?

我想扩展一个带有一些新功能的大型C项目,但我真的想用Python编写它.基本上,我想从C代码调用Python代码.但是,像SWIG这样的Python-> C包装器允许OPPOSITE,即编写C模块并从Python调用C语言.

我正在考虑一种涉及IPC或RPC的方法(我不介意有多个进程); 也就是说,让我的纯Python组件在一个单独的进程中运行(在同一台机器上),让我的C项目通过从套接字(或unix管道)写入/读取来与之通信.我的python组件可以读/写socket来进行通信.这是一种合理的方法吗?还有更好的东西吗?像一些特殊的RPC机制?

感谢到目前为止的答案 - 但是,我想专注于基于IPC的方法,因为我希望将我的Python程序作为我的C程序在一个单独的过程中.我不想嵌入Python解释器.谢谢!

c python interop cross-domain

40
推荐指数
3
解决办法
6万
查看次数

IntPtr,SafeHandle和HandleRef - 解释

在没有指向MSDN的情况下,有人可以简明扼要地解释每个问题的目的以及何时使用它们.(IntPtr,SafeHandle和HandleRef)

.net winapi interop

39
推荐指数
2
解决办法
2万
查看次数

从python调用C#库

任何人都可以分享如何从python代码调用一个简单的C#库(实际上是它的WPF)的工作示例?(我已经尝试过使用IronPython,并且在我的python代码使用不受支持的CPython库时遇到了太多麻烦所以我想尝试反过来并从Python调用我的C#代码).

这是我正在玩的例子:

using System.Runtime.InteropServices;
using System.EnterpriseServices;

namespace DataViewerLibrary
{
    public interface ISimpleProvider
    {
       [DispIdAttribute(0)]
       void Start();
    }

    [ComVisible(true)]
    [ClassInterface(ClassInterfaceType.None)]
    public class PlotData : ServicedComponent, ISimpleProvider
    {
       public void Start()
       {
          Plot plotter = new Plot();
          plotter.ShowDialog();
       }
    }
}
Run Code Online (Sandbox Code Playgroud)

绘图仪是一个绘制椭圆的WPF窗口

我不知道如何从我的python中调用这段代码.有什么建议?

c# python ironpython interop python.net

39
推荐指数
4
解决办法
6万
查看次数