web-dev-qa-db-ja.com

Linuxでwindows.hの代わりに何を使うべきですか

WindowsプログラムをLinuxに移植しようとしています。私はLinuxでプログラミングしたことがなく、自分が何をしているのかほとんどわかりません。 LinuxのG ++コンパイラーで発生した多くのエラーをなんとか解消し、残りのエラーのほとんどを存在しない変数タイプまで追跡しました。

私はwindows.hファイルを取り出しましたが、CALLBACKHANDLEDWORDおよびHHOOK変数の処理方法を知っています。どうやらLinuxにはHANDLEに相当するものがないので、構造の一部を書き換える必要があるかもしれません。

誰もが私が何をすべきかを説明したり、Linuxでこれらのことを行う方法を教えてくれるいくつかのチュートリアルを私に指摘したりできますか?

私のプログラムは、RS-485ネットワークでポーリングループを実行します。

18
Skeith

欠落しているtypedef(HANDLEなど)は問題ではありません。あなたの問題は、LinuxとWindowsが完全に異なるAPIを持っていることです。いくつかのタイプ定義を置き換えることによって、一方を他方に移植することを単純に期待することはできません。

コードの完全なプラットフォーム依存部分を置き換える必要があります。したがって、最初のステップはLinux APIを学ぶことです。これを行う最良の方法は、Linuxプログラミングに関する本を入手することです。

さらに、LinuxはWindowsのようにウィンドウ管理用のデフォルトのAPIを提供していないため、グラフィカルアプリケーションをプログラミングしている場合は、ウィンドウライブラリも選択する必要があります。

18
Konrad Rudolph

Linuxでのwindows.hの場合、いわば「同等の」ものはありません。ケースバイケースでエラーを修正する必要があります。あるいは、(複雑すぎない場合は)Linux向けにコードを書き直す必要があります。

ただし、Windows固有のAPIを無視すると、typedefエラー(DWORD、HANDLEなど)を修正できる場合があります。

#ifndef DWORD
#define WINAPI
typedef unsigned long DWORD;
typedef short WCHAR;
typedef void * HANDLE;
#define MAX_PATH    PATH_MAX
typedef unsigned char BYTE;
typedef unsigned short Word;
typedef unsigned int BOOL;
#endif

typedefソースコード

13
Soufiane Hassou

windows.hは、アプリケーションがWindowsオペレーティングシステムのAPIを使用することを意味し、Linux上の別のライブラリへの1対1のマッピングはありません。

アプリケーションを移植したくない場合は、Wineでアプリケーションを実行することを検討できます。

2
Ahmed Khalaf

2つのオプションがあります。

  1. 不足している型を新しいOSに適した型にTypedefします。
  2. これらのタイプを使用しないようにコードを書き直してください。

それぞれのケースの詳細を知らなくても、誰があなたが移植で何をすべきかをあなたに教えることができるとは思えません。 windows.hについてのことは、それがWindows OSに依存しているということです...そこから呼び出す関数を変更する必要があります。その場合は、所有していないタイプを使用しなくなります。
基本的には、Windows APIの用途を理解し、ターゲットOSに相当する関数を見つける必要があります。

1
Dennis

LinuxはWindowsとはまったく異なるプログラミングモデルを持っています。シリアルポートのプログラミングに興味がある場合(RS485はRS232に似ています) ここ は、基本を示すチュートリアルです。

0
doron