在java里怎么在一个java程序里调用运行另一个java类

在java里怎么在一个java程序里调用运行另一个java类,第1张

先把2个文件放在同一个包下面,这样就可以访问另一个java程序了。

一般的方法是在A程序里实例化B类,然后通过B方法名

去调用B类里的方法

RuntimegetRuntime()exec("外部程序");

相当于你在cmd控制台中输入"外部程序"并回车执行

调用其他程序有两种方式,一个是直接调用其他模块中的函数,另外一个是用系统调用的方式调用已经编译连接好的可执行文件。

第一种方法的话,无论你用什么工具都是在你的程序里面添加你要调用函数的函数声明,然后再编译之后把两个obj文件连接起来。或者是把你要调用函数作到一个lib文件里面,然后连接到这个库。

第二种方式的话,就是把你要调用的函数(main函数)编译连接成一个独立的可执行文件,然后在你自己的程序里面指定目录结构程序名用系统调用执行。

VC的话不太适合初学者理解c语言,不过楼主如果是仅仅完成这个程序的功能的话,第一种方法中的编译和连接工作VB都会给你做,你只需要把代码加入工程中,然后在你的函数前声明调用的函数就行了。

--------不华丽的分割线-------

我明白了,你不理解的是我说的编译啊连接这些术语。这样吧,你新建一个VC工程,把那个c加进去,然后执行一下。接着去你建的那个工程的文件夹下找一个和你的工程名一样的后缀是exe的文件就能用了。前提是你要用的那个c文件里面有main方法。

1要调用的测试程序代码

#include <stdioh>

int main(int argc, char argv[])

{

for(int i = 0; i < argc; i++)

puts(argv[i]);

return 0;

}

2主程序代码

#include <stdioh>

#include <stringh>

#include <stdlibh>

#define program_name "putsexe "

int main(int argc, char argv[])

{

char buf[1024];

char temp[1024];

while(1)

{

memset(buf, 0, sizeof(buf));

strcpy(buf, program_name);

puts("请输入程序参数:");

gets(temp);

strcat(buf, temp);

system(buf);

}

return 0;

}

这里我创建了一个进程调用网易云音乐,代码如下。CreateProcess是关键

#include <stdioh>

#include <windowsh>

int main(int argc, char argv[])

{

  //创建进程

 char szCommandLine[]="C:\\Program Files (x86)\\Netease\\CloudMusic\\cloudmusicexe";

 STARTUPINFO si={sizeof(si)};

 PROCESS_INFORMATION pi;

 sidwFlags=STARTF_USESHOWWINDOW;

 siwShowWindow=true;

 bool bRet=::CreateProcess(

  NULL,

  szCommandLine,

  NULL,

  NULL,

  FALSE,

  CREATE_NEW_CONSOLE,

  NULL,

  NULL,

  &si,

  &pi);

 if(bRet)

 {

  ::CloseHandle(pihThread);

  ::CloseHandle(pihProcess);

  printf("新进程的进程ID号:%d\n",pidwProcessId);

  printf("新进程的主线程的ID号:%d\n",pidwThreadId);

 }

}

运行另一个程序的话,有很多办法,比如 ShellExecute,WinExec,CreateProcess 等

调用另一个 dll,有静态调用和动态调用两种

静态调用就是在代码里 include 头文件,包含函数定义,并且链接 dll 的 lib 文件,然后直接使用即可,编译器会自动链接这个 dll,但是如果 dll 找不到,那么程序会无法启动

所以对于不确定 dll 是否可以正常使用时,需要使用动态调用

首先需要使用 LoadLibrary 函数

HMODULE WINAPI LoadLibrary(

  _In_  LPCTSTR lpFileName

);

成功载入 dll 之后,再使用 GetProcAddress 函数获取 要使用的函数的地址

FARPROC WINAPI GetProcAddress(

  _In_  HMODULE hModule,

  _In_  LPCSTR lpProcName

);

然后就可以使用了,不需要的时候可以使用 FreeLibrary 释放 dll 内存

BOOL WINAPI FreeLibrary(

  _In_  HMODULE hModule

);

下面死是 MSDN 给出的例子作为参考

// A simple program that uses LoadLibrary and 

// GetProcAddress to access myPuts from Myputsdll 

 

#include <windowsh> 

#include <stdioh> 

 

typedef int (__cdecl MYPROC)(LPWSTR); 

 

int main( void ) 

    HINSTANCE hinstLib; 

    MYPROC ProcAdd; 

    BOOL fFreeResult, fRunTimeLinkSuccess = FALSE; 

 

    // Get a handle to the DLL module

    hinstLib = LoadLibrary(TEXT("MyPutsdll")); 

 

    // If the handle is valid, try to get the function address

    if (hinstLib != NULL) 

    { 

        ProcAdd = (MYPROC) GetProcAddress(hinstLib, "myPuts"); 

 

        // If the function address is valid, call the function

        if (NULL != ProcAdd) 

        {

            fRunTimeLinkSuccess = TRUE;

            (ProcAdd) (L"Message sent to the DLL function\n"); 

        }

        // Free the DLL module

        fFreeResult = FreeLibrary(hinstLib); 

    }

    // If unable to call the DLL function, use an alternative

    if (! fRunTimeLinkSuccess) 

        printf("Message printed from executable\n");

    return 0;

}

以上就是关于在java里怎么在一个java程序里调用运行另一个java类全部的内容,包括:在java里怎么在一个java程序里调用运行另一个java类、C语言 调用另一个程序、C语言一个程序调用另一个带参程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/9795280.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-02
下一篇2023-05-02

发表评论

登录后才能评论

评论列表(0条)

    保存